选择排序算法在每一步中选取最小值来重新排序,通过选择和交换来实现排序。
具体流程如下:
1、首先从原数组中选择最小的1个数据,将其置于第一个位置。
2、然后从剩下的数据中再选择其中最小的一个数据,并将其置于原数组的第二个位置。
3、不断重复选择和交换的过程,直至最后排序完成。
假如有初始数据:25 11 45 26 12 78。
1、第一轮排序,从原数组中选择出最小的数据,并将其置于第一个位置。第一轮排序后,顺序为:[11, 25, 45, 26, 12, 78]。
2、第二轮排序,从剩下的数据中再选择出其中最小的一个数据,并将其置于原数组的第二个位置。第二轮排序后,顺序为:[11, 12, 45, 26, 25, 78]。
.......
3、最终顺序为:[11, 12, 25, 26, 45, 78]。
选择排序是不稳定的排序。选择排序的时间复杂度和空间复杂度分别为 O(n2 ) 和 O(1) (选择排序只需要一个额外空间用于数组元素交换)。
Java 代码实现如下:(https://github.com/xbk417/algorithm)
public void sort(int[] arr) { int tmp; // 第n轮排序过程中的较小数的下标 int small; for(int i = 0; i < arr.length - 1; i++) { small = i; // 找出最小的数的下标 for(int j = i + 1; j < arr.length; j++) { if(arr[j] < arr[small]) { small = j; } } // 交换 if(small != i) { tmp = arr[i]; arr[i] = arr[small]; arr[small] = tmp; } System.out.println(i + ":" + Arrays.toString(arr)); } }