代码之神 2019-06-25
每一次从代排序的数据元素中选出最小(或最大)的一个元素,存放在序列起始位置,直到全部代排数据元素排完.
比如序列[6 4 5 2 1]先选出最小元素1排到起始位,依次从代排序列选出2,4,5,6.
public static void selectSort(int[] arr) { if (arr == null || arr.length == 0) { return; } int temp,k; for (int i=0; i<arr.length-1; i++) { k = i; for (int j=i+1; j<arr.length; j++) { if (arr[j] > arr[k]) { k = j; } } if (i != k) { temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } } }
与序列初始排序无关,分析代码可知比较操作为n(n-1)/2(内部for循环部分),而赋值操作与初始排序有关,正序时为0,反序时为3 n(n-1)/2 (3比较操作);
所以,选择排序最差平均都是O(n^2)
选择排序是一个不稳定的排序算法.
如序列[5,5,3]第一次排序就将3与第一个5进行交换.