选择排序

选择排序是一种常见的排序算法,它的实现比较简单。

1.选择排序的思想:
选择排序的思想有点类似插入排序,也是将数据分为有序部分和无序部分,每次将有序部分的数据与无序部分的第一个数据进行比较,得到最小元素的索引index,然后进行交换,从而实现有序。

2.代码实现:

package www.first;

public class selectSort {
    public static void chooseSort(int[] a){
        if(a.length<=1||a==null){
            return;
        }else{
            //第一次的有序部分只有一个元素
            for(int i = 0;i<a.length;i++){
                int minIndex = i;
                //找到最小元素的下标
                for(int j = i+1;j<a.length;j++){
                    if(a[j]<a[minIndex]){
                        minIndex = j;
                    }
                }
                //进行交换
                int temp = a[i];
                a[i] = a[minIndex];
                a[minIndex] = temp;
            }
        }
    }
    public static void main(String[] args) {
        int[] arr = new int[]{1,3,2,5,4,6,2,8,0};
        chooseSort(arr);
        for(int a:arr){
            System.out.print(a+" ");
        }
    }
}

结果如下:
在这里插入图片描述
3.选择排序总结:

  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1),只开辟临时的空间用来交换,是原地排序算法
  • 选择排序不是一种稳定的排序算法,选择排序每次都要找未排序元素中的最小值,并与前面的元素进行比较交换,破坏了稳定性。

4.选择排序与直接插入排序的对比:
我随机生成了10万条数据分别来进行两种排序,来看看结果:
在这里插入图片描述
看起来选择排序的效率并不是很好,所以平时不太使用。

生成10万条近乎有序的数据,结果如下:
在这里插入图片描述
可以看出,直接插入排序在近乎有序的情况下的性能远高于选择排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值