选择排序

150 阅读1分钟

第一次从arr[0]~arr[n-1]中选择最小值与arr[0]交换;第二次从arr[1]~arr[n-1]中选择最小值与arr[1]交换;......;第(n-1)次从arr[n-2]~arr[n-1]中选择最小值与arr[n-2]交换,总共进行(n-1)次。如:

原始数组为:101 34 119 1
第一轮排序:1 34 119 101
第二轮排序:1 34 119 101
第三轮排序:1 34 101 119

说明:

  1. 选择排序共有(数组大小-1)轮排序

  2. 每一轮排序均是一个循环

    2.1 先假定当前数为最小数

    2.2 然后和后面的数字逐个比较,若发现有比当前更小的数,就重新确定最小数,并得到下标

    2.3 遍历到数组最后时,就得到本轮最小数及其下标

    2.4 交换

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;
           }
       }
   //将最小值放在arr[i],进行交换
   if (minIndex != i) {
   	arr[minIndex] = arr[i];
       arr[i] = min;
   }
   System.out.println(Arrays.toString(arr));
}