1. 程式人生 > >資料結構與演算法-簡單選擇排序

資料結構與演算法-簡單選擇排序

概要

選擇排序法初步思想

愛炒股票斷線的人,總是喜歡不斷的買進賣出,想通過價差來實現盈利。但通常這種頻繁操作的人,即使失誤不多,也會因為操作的手續費和印花稅過高而獲利很少。還有一種做股票的人,他們很少出手,只是在不斷的觀察和判斷,等到時機一到,果斷買進或賣出。他們因為冷靜和沉著,以及交易的次數少,而最終收益頗豐。

氣泡排序的思想就是不斷地在交換,通過交換完成最終的排序,這和做股票短線頻繁操作的人是類似的。我們可不可以像只有在時機非常明確時才出手的股票高手一樣,也在排序時找到合適的關鍵字再做交換,並且只移動一次就完成相應關鍵字的排序定位工作呢?這就是選擇排序法的初步思想。

基本概念

簡單選擇排序法(Simple Selection Sort)就是通過n-i-1次關鍵字間的比較,從n-i個記錄中選出關鍵字最小的記錄,並和第i(0≤i≤n)個記錄交換之。

java程式碼實現

/* 申明待排序陣列 */
int[] a = {9,1,5,8,3,7,4,6,2};
int min = 0;
for (int i = 0; i < a.length; i++) {
    min = i;	/* 將當前下標定義為最小值下標 */
    for (int j = i+1; j < a.length; j++) { /* 迴圈【之後】的資料 */
if (a[j] < a[min]) { /* 如果有小於當前最小值的關鍵字 */ min = j; /* 將此關鍵字的下標賦值給min */ } } if (i != min) { /* 若min不等於i,說明找到最小值,交換兩者 */ int temp = a[i]; a[i] = a[min]; a[min] = temp; } }

圖示執行過程

時間複雜度分析

  • 從簡單選擇排序的過程來看,它最大的特點就是交換移動的次數相當少,這樣也就節約了時間。分析他的時間複雜度發現,無論最好最差的情況,其比較次數都是一樣多,第i趟排序需要進行n-i-1次關鍵字的比較,此時需要比較(n-1)+(n-2)+···+1=n(n-1)/2次。而對於交換次數而言,當最好的時候(表本身有序),交換0次,最差的時候,也就是初始降序時,交換次數為n-1次,基於最終的排序時間是比較與交換的次數總和,因此,總的時間複雜度依然為O(n2
    )。
  • 儘管與氣泡排序同為O(2),但簡單選擇排序的效能還是要略優於氣泡排序