選擇排序(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...