1. 程式人生 > >經典排序之選擇排序

經典排序之選擇排序

思想 space election 數據 穩定性 sys 存在 算法思想 oid

選擇排序(SelectionSort)的算法思想:對於n個待排序的數組,進行n-1次排序,每次選出待排序數據集中的最小數(或最大數),然後將選出的最小數(或最大數)與當前待排序數據集的首個數交換;以此類推,直到排序結束,整個待排序數組也成為有序數組。

之所以稱為選擇排序,意為每次選出最小或最大的數,從而完成排序。

我接下來通過 代碼演示:

/** * 選擇排序 * @author 李章勇 */ import java.util.Arrays; public class Demo1 { static int num=0; static void selectSort(int[] arr){
for(int i=0;i<arr.length-1;i++){ int k=i;//把數組最左側的角標賦給k for(int j=k+1;j<arr.length;j++){ if(arr[j]<arr[k]){//升序排列,如果發現有比arr[k]小的元素,則存下該元素所在的角標 k=j; } } if(i!=k){//如果存在比arr[i]更小的元素,則將該元素與arr[i]交換位置,依次類推,完成數組升序排列 int temp=arr[i]; arr[i]=arr[k]; arr[k]=temp; System.out.println("第 "+(++num)+" 次:"+Arrays.toString(arr));
} } } public static void main(String[] args) { int[] arr={15,23,8,4,6,9,19}; System.out.println("排序前:"+Arrays.toString(arr)); selectSort(arr); System.out.println("排序後:"+Arrays.toString(arr)); } }

上述代碼運行後的結果:

排序前:[15, 23, 8, 4, 6, 9, 19] 第 1 次:[4, 23, 8, 15, 6, 9, 19] 第 2 次:[4, 6, 8, 15, 23, 9, 19] 第 3 次:[4, 6, 8, 9, 23, 15, 19] 第 4 次:[4, 6, 8, 9, 15, 23, 19] 第 5 次:[4, 6, 8, 9, 15, 19, 23] 排序後:[4, 6, 8, 9, 15, 19, 23]

最後,選擇排序的平均時間復雜度為O(n2),在穩定性方面是不穩定的。

【註:關於排序中的穩定性,請參考本博中的“經典排序之插入排序”文章】

經典排序之選擇排序