選擇排序演算法(排序詳解)

2021-07-11 16:52:08 字數 1381 閱讀 9423

選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第乙個[5]與[3]交換,導致第乙個5挪動到第二個5後面)。

n個記錄的檔案的直接選擇排序可經過n-1趟直接選擇排序得到有序結果:

①初始狀態:無序區為r[1..n],有序區為空。

②第1趟排序

在無序區r[1..n]中選出關鍵字最小的記錄r[k],將它與無序區的第1個記錄r[1]交換,使r[1..1]和r[2..n]分別變為記錄

個數增加1個的新有序區和記錄個數減少1個的新無序區。 ……

③第i趟排序

第i趟排序開始時,當前有序區和無序區分別為r[1..i-1]和r(i..n)。該趟排序從當前無序區中選出關鍵字最小的記錄

r[k],將它與無序區的第1個記錄r交換,使r[1..i]和r分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無

序區。

基本方法

1. 演算法完成需要 n - 1 趟排序,按照演算法的描述,n - 1 趟排序之後陣列中的前 n - 1 個元素已經處於相應的位置,第 n

個元素也處於相應的位置上。

2. 第 i 趟排序,實際上就是需要將陣列中第 i 個元素放置到陣列的合適位置,這裡需要乙個臨時變數 j 來遍歷序列中未

排好序的那些元素,另一臨時變數 d 來記錄未排好序的那些元素中值最小的元素的下標值,

3. 一趟遍歷開始時,令 d = i,假定未排序序列的第乙個元素就是最小的元素,遍歷完成後,變數 d 所對應的值就是值

最小的元素,判斷 d 是否是未排序序列的第乙個元素,如果是,則不需要交換元素,如果不是,則需要交換array[d] 和

array[i]。

4. 此方法是不穩定排序演算法,可對陣列 排序就可以看出,排序

完成後 a1 和 a4的相對位置改變了。

5. 此方法移動元素的次數比較少,但是不管序列中元素初始排列狀態如何,第 i 趟排序都需要進行 n - i 次元素之間的

比較,因此總的比較次數為1 + 2 + 3 + 4 +5 + . . . + n - 1 = n(n-1)/2, 時間複雜度是 o(n^2).

2.時間複雜度

// 簡單選擇排序演算法

public static void selectsort(int a)

}a[n] = a[i];

a[i] = min;

} }

排序演算法C 實現之選擇排序詳解

將無序陣列變為有序陣列 通過迴圈,每次選出在當前的剩餘元素中最小的元素,使得這些選出的元素構成有序陣列 using system namespace selectionsort program ps new program ps.selectsort a console.writeline 排序結果...

排序演算法 選擇排序

private static int leftchild int i private static void perc int a,int i,int n for int i 0 ir j break else public static void heasp int r,int n for i 0...

排序演算法 選擇排序

摘自 wiki百科 選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小元素,然後放到排序序列末尾 目前已被排序的序列 以此類推,直到所有元素均排序完畢。c語言實現 vo...