选择排序是也是一种简单粗暴的排序算法。实现原理是一直找无序序列中的最小值(或者最大值)与待排序下标进行交换。
1.代码实现
以java实现为例:
public class SelectionSort { public static int[] selectionSort(int[] nums) { //循环遍历序列的每一个下标 for (int i = 0; i < nums.length; i++) { int minIndex = i; //记录当前无序序列最小元素下标 for (int j = i; j < nums.length; j++) { if(nums[minIndex] > nums[j]){ minIndex = j; } } //如果最小元素下标不是待排序下标,就将两个元素交换,把当前最小元素放到当前排序下标中 if(minIndex!=i){ int temp = nums[minIndex]; nums[minIndex] = nums[i]; nums[i] = temp; } } return nums; } public static void main(String[] args) { int[] nums = new int[] { 9, 8, 7, 6, 5, 4, 3, 2, 10 }; int[] newNums = selectionSort(nums); for (int x : newNums) { System.out.print(x+" "); } } }
2.数据运行解析
数据的分解示例如下
[9 8 7 6 5 4 3 2 10] 每次拿到最小元素与待排序下标交换 ->[2 8 7 6 5 4 3 9 10] ->[2 3 7 6 5 4 8 9 10] ->[2 3 4 6 5 7 8 9 10] ....
3.复杂度分析
选择排序在最好最差和平均时间复杂度都是O(n²),空间复杂度为T(1)。