基本思想
在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;
第二次遍历n-2个数,找到最小的数值与第二个元素交换;
。。。
第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。
(菜鸟教程)
代码
时间复杂度O(n²)
public static void selectSort(int[] arr) {
for (int i = 0;i<arr.length-1;i++){
int minIndex = i;
int min = arr[i];
for (int j = i+1;j<arr.length;j++){
if (min>arr[j]){
min = arr[j];
minIndex = j;
}
}
if (minIndex != i){
arr[minIndex] = arr[i];
arr[i] = min;
}
System.out.println("第"+(i+1)+"轮后:"+ Arrays.toString(arr));
}
}
挺简单的,没啥好说的,就是一轮找一个最小的,放到这一轮的开始处(由小到大)
由大到小就找最大的放到开始处
源码+时间测试
https://github.com/FanZejie/dataStructure1/blob/master/select/src/SelectSort.java