每一次從代排序的數據元素中選出最小(或最大)的一個元素,存放在序列起始位置,直到所有代排數據元素排完.java
好比序列[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)code
選擇排序是一個不穩定的排序算法.
如序列[5,5,3]第一次排序就將3與第一個5進行交換.排序