参考文档:
原理:
对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换;接着对不包括第一个记录以外的其他记录进行第二轮比较,得到最小的记录并与第二个记录进行位置交换;重复该过程,直到进行比较的记录只有一个时为止
代码实现:
public static void selectSort(int[] num) { for(int i=0;i<num.length;i++){ int k=i; for(int j=num.length-1;j>i;j--){ if(num[j]<num[k]){ k=j; } } if(k!=i){ swap(num, i, k); } } } public static void swap(int []arr,int a ,int b){ int temp=arr[a]; arr[a] = arr[b]; arr[b] = temp; }
算法分析:
- 时间复杂度:O(N2)
简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数总是N (N - 1) / 2
而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0
当序列反序时,移动次数最多,为3N (N - 1) / 2
所以,综合以上,简单排序的时间复杂度为 O(N2)
- 空间复杂度:O(1)
- 稳定性:不稳定