基本原理: 每一次从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕,也就是:每一趟在n-i+1(i=1,2,....n-1))个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序,树形选择排序,和堆排序。(这里只介绍常用的简单选择排序)
public static void main(String[] args) { int[] arr={1,3,2,45,65,33,12}; System.out.println("交换之前:"); for(int num:arr){ System.out.print(num+" "); } //选择排序的优化 for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序 int k = i; for(int j = k + 1; j < arr.length; j++){// 选最小的记录 if(arr[j] < arr[k]){ k = j; //记下目前找到的最小值所在的位置 } } //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换 if(i != k){ //交换a[i]和a[k] int temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } } System.out.println(); System.out.println("交换后:"); for(int num:arr){ System.out.print(num+" "); } }