-
选择排序(select sorting)的思路解析:
第一次:从arr[0]~arr[n-1]中选取最小值,与arr[0]交换
第二次:从arr[1]~arr[n-1]中选取最小值,与arr[1]交换
第三次:从arr[2]~arr[n-1]中选取最小值,与arr[2]交换
第四次:从arr[3]~arr[n-1]中选取最小值,与arr[3]交换
…
第n-1次:从arr[n-2]~arr[n-1]中选取最小值,与arr[n-2]交换
总共经过n-1次,无序数列将变成有序数列 -
选择排序分析图解如下:
/*
选择排序
1.时间复杂度:O(n^2)
2.稳定性:O(n^2)
*/
public class ChoiceSort {
public static void main(String[] args) {
int[] arr = new int[]{8,3,2,1,7,4,6,5};
System.out.println("排序前:");
System.out.println(Arrays.toString(arr));
choiceSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void choiceSort(int[] arr) {
//拿当前元素和后面的元素比较 找到最小值
for (int i=0; i<arr.length-1;i++){
int min = arr[i]; //假定最小值是arr[i]
int k = i; //用k来记录最小值元素的下标
for(int j=i+1; j<arr.length; j++) {
if(min > arr[j]){ //说明假定的最小值并不是最小
min = arr[j]; //更新最小值
k = j; //更新最小值的下标
}
}
if (k!=i){
arr[k]=arr[i];
arr[i]=min;
}
}
}
}