选择排序一共有数组大小的 -1 轮排序,每次找到当前这一轮元素的最小值,并且得到其下标,然后交换。
时间复杂度O(n^2)。
例:101,34,55,32,48,49 (从小到大的顺序)
第一轮:32,34,55,101,48,49 (选取第一个数101为基准<当做最小值>,并且将当前的下标记为0,将基准后面的数与基准作比较,找到最小的数,更新最小数的值以及下标,将其与开始的基准交换位置)
第二轮:32,34,55,101,48,49 (选取第二个数,即34为基准,后面操作同上)
第三轮:32,34,48,101,55,49
第四轮:32,34,48,49,55,101
第五轮:32,34,48,49,55,101
具体代码如下:
import java.util.Arrays; public class SelectSort { public static void main(String[] args) { int[] arr = {101,34,55,32,48,49}; selectSort(arr); } //选择排序 public static void selectSort(int[] arr){ for (int j = 0; j < arr.length-1; j++) { int minIdex = j; //最小值索引 int min = arr[j]; //最小值 for (int i = j+1; i < arr.length; i++) { if(min > arr[i]){ //更新最小值和索引 min = arr[i]; minIdex = i; } } if(minIdex !=j){ //说明最小值和索引更新了,进行交换,否则当前基准为最小值,不进行交换 arr[minIdex] = arr[j]; arr[j] = min; } } System.out.println("排序后 :"+Arrays.toString(arr)); } }
运行结果: