Java: 排序 - 選擇排序
阿新 • • 發佈:2018-12-13
選擇排序對於n個數的陣列,需要n-1次遍歷,時間複雜度n2,空間複雜度1。
n個數的陣列,升序選擇排序過程如下:
第一次遍歷,假設對映陣列最小值的下標minIndex為下標0,
從下標1到下標n-1作為排序佇列,輪流與下標min比較對映值,每當min的對映值大於對方,則min的下標被對方下標覆蓋。最後min下標的值與下標0互換,保證下標0對映當前排序佇列的最小值。
…
第m次遍歷(m<n-1),假設對映陣列最小值的下標min為下標m-1,
從下標m到下標n-1作為排序佇列,輪流與下標min比較對映值,每次如果min的對映值大於對方,則min的下標被對方下標覆蓋。最後min下標的值與下標m-1的值互換,保證陣列前m個數都排序完成。
…
第n-1次遍歷,將最後2個數排序後,整個陣列即為升序陣列
public static boolean selectSort(int[] arr){
int min;
for (int i=0;i<arr.length;i++){
min = i;
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[min]){
min = j;
}
}
int tmp = arr[min];
arr[min] = arr[i];
arr[i] = tmp;
}
return true;
}
測試
int[] arr = {1,3,2,4,7,9,9,10,84,72,17,85,100,1,66,23};
selectSort(arr);
System.out.println(Arrays.toString(arr));
結果
[1, 1, 2, 3, 4, 7, 9, 9, 10, 17, 23, 66, 72, 84, 85, 100]
選擇和冒泡相比,對於長度n的陣列,每次遍歷發生的元素交換從n-1次降為1次,效能有很大提升。
但是缺點是固定需要n-1次遍歷,優點在於節省記憶體空間。