选择排序–时间复杂度n^2
-
第一次从arr[0]–arr[n-1]中选出最小值,与arr[0]交换
-
第二次从arr[1]–arr[n-1]中选出最小值,与arr[1]交换…
-
最小数:假定当前这个数是最小数,然后和后面的每个数进行比较,当发现有更小的数时,重定最小数与最小数的下标
总结:
选择排序一共有数组大小-1次排序
排序过程:
排序之前--
[101, 34, 119, 1]
第1轮后--
[1, 34, 119, 101]
第2轮后--
[1, 34, 119, 101]
第3轮后--
[1, 34, 101, 119]
代码实现:
public class SelectSort {public static void main(String[] args) {int[] arr = {101, 34, 119, 1};System.out.println("排序之前--");System.out.println(Arrays.toString(arr));selectSort(arr);}public static void selectSort(int[] arr) {//时间复杂度n^2//总的排序循环次数for (int i = 0; i < arr.length - 1; i++) {
//假定当前最小索引与最小数int minindex = i;int min = arr[i];//从最小数后面一个数开始比较,也就是从第2个数开始比较for (int j = i+1; j < arr.length; j++) {if (min > arr[j]) {//如果当前选定的数并不是最小的数//重置最小数与最小下标min = arr[j];minindex = j;}}//一趟结束后,找到了最小值与最小索引,开始交换if (minindex != i) {//当最小值不是我们要交换的数值下标时//此时最小值的位置放成arr[0]arr[minindex] = arr[i];//交换最小值与arr[0],第一趟arr[i] = min;}System.out.println("第"+(i+1)+"轮后--");System.out.println(Arrays.toString(arr));}}
}