選擇排序(Selection Sort)

2021-10-20 19:37:24 字數 1974 閱讀 5091

選擇排序(selection-sort)是一種簡單直觀的排序演算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

n個記錄的直接選擇排序可經過n-1趟直接選擇排序得到有序結果。具體演算法描述如下:

n-1趟結束,陣列有序化了。

}}表現最穩定的排序演算法之一,因為無論什麼資料進去都是o(n2)的時間複雜度,所以用到它的時候,資料規模越小越好。唯一的好處可能就是不占用額外的記憶體空間了吧。理論上講,選擇排序可能也是平時排序一般人想到的最多的排序方法了吧。

氣泡排序可以說是十大排序算的鼻祖,幾乎後面所有的排序演算法都是基於氣泡排序一步步改進,所做的優化。選擇排序也不例外。

這就要從氣泡排序的缺點說起:冒泡通過從頭遍歷,比較相鄰元素,滿足條件則換位的方式實現排序。

每次比較,一旦滿足左》右則立刻發生換位操作。這樣一輪下來,最壞可能要換位length-1次

而選擇排序採用標記,延遲換位。減少了演算法排序中的元素換位操作次數。提公升演算法效率

首先,選擇排序也是兩兩比較排序。每輪選出乙個該輪的最小數,追加到左側有序部分的尾部。所以對於長度為n的陣列,需要排序n-1輪

由於每輪會得出乙個最小數,將其與該輪用來比較的元素換位(從巨集觀上只關注左側有序序列構建方式來看,好比每輪往左側有序列表的尾部追加元素一樣),下一輪待排序元素便從上一輪用來比較的元素下標+1開始。也就是內層迴圈的j=i+1開始到陣列的最後乙個元素。

我們先定義乙個minindex變數,用來儲存每一輪排序得出的最小值下標。

待該輪遍歷比較結束,判斷minindex最小值下標和用來做比較的元素下標是否一致。不一致則換位,否則不換位(一致說明用來比較的元素是該輪的最小值,不用動。然後指標右移)。

這樣每一輪依照這種方式,進行比較,延遲換位排序實現對無列表的排序。

注意:

選擇排序是不穩定排序。為什麼這麼說呢?假設有乙個陣列`array=

這裡省略具體排序細節

1.第一輪排序,用1和右側所有元素比較,1最小,不換位array=

2.第二輪排序,用2和2後面的所有元素比較,2最小,不換位array=

3.第三輪排序,用第三個5和其後面元素比較,3最小,換位array=

4.注意,本來在下標2位置的5和元素3(下標4)換位後,被移動到了陣列末尾。而這個5和下標3位置的5大小相等。原本在下標4位置的5的前面,換位後被移動到了後面

5.第四輪,用下標3位置的5和最後乙個元素5比較,相等,不換位。得出陣列array=

在這個過程中原本在前面的5,在排序結束後被移動到了同為5的另乙個元素後面。實際中,對於基本型別這點倒不會引發問題。但對於引用型別,比如我們使用選擇排序對乙個物件列表,據其元素的某乙個欄位name,進行排序(除name外其他屬性字段值不同)。會發現得出的列表。相同name值得元素a,b

有時a在前,有時b在前。所以當我們對引用型別序列進行排序並著重關注其順序時,不穩定排序則不適用。應選用穩定排序

其實,可以看出。上節所講的氣泡排序和本章的選擇排序都可看做:通過遍歷乙個待排序無序序列,通過比較換位,來在序列的一段構建有序序列的方式來實現排序。關於氣泡排序,之前只示例了乙個最簡單的優化排序演算法,還有很多比如如雞尾酒排序(使用分治法進行雙向氣泡排序)等等,有很多基於經典演算法衍生出來的優化演算法,名字千奇百怪。後續我也會陸續更新和完善。

文章有任何語言表達不當,或者講解枯燥晦澀的地方也望有緣的讀者可以提出。本人將不勝感激,並努力修正。

關於演算法的理論和**資料借鑑

基礎演算法之選擇排序Selection Sort

原理 首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。一種簡單直觀的排序演算法。例子將陣列 3,6,4,2,5,1 進行從大到小排序 排序步驟 第一趟找到最小數1,放到最前邊...

排序 選擇排序 選擇排序 堆排序

寫在前面 上傳github交換排序選擇排序 堆排序 選擇排序 顧名思義,我們就可以猜到,它是原則合適的元素放到合適的位置 從圖中,我們可以得到 1.用第乙個元素,和其他所有的元素進行比較,找出最小的,然後進行交換 2.然後進行,資料的遞增 3.直到資料全部有序 void selectsort int...

選擇排序 直接選擇排序

演算法思想 在每一趟的排序中,從待排序列中選出關鍵字最小或者最大的元素放在其最終的位置上 過程分析 在第i趟直接排序中,通過n i次關鍵字的比較,從n i 1個元素中選出關鍵字最小的元素 與第i個元素進行交換。經過n 1趟比較,直到表有序為止 效能分析 時間複雜度o n 2 include defi...