3.1.1蠻力法之選擇排序
阿新 • • 發佈:2017-10-15
特性 序表 sel div wap 數組 排列 code for
選擇排序開始的時候,我們掃描整個列表,找到它的最小元素,然後和第一個元素交換,將最小元素放到它在有序表中的最終位置上。然後我們從第二個元素開始掃描列表,找到最後n-1個元素中的最小元素,再和第二個元素交換位置,把第二小的元素放在它的最終位置上。一般來說,在對該列表做第i遍掃描的時候(i的值從0到n-2),該算法在最後n-i個元素中尋找最小元素,然後拿它和Ai交換。在n-1遍以後,該列表就被排好序了。
算法偽代碼(假設列表由數組實現)
SelectionSort(A[0...n-1]) //輸入:一個可排序數組A[0...n-1] //輸出:升序排列的數組A[0...n-1] for i←0to n-2 do min←i for j←i+1 to n-1 do if A[j]<A[min] min←j swap A[i] and A[min]
執行次數
對於任何輸入來說,選擇排序都是一個Θ(n2)的算法。然而,請註意,鍵的交換次數僅為Θ(n),或者更精確一點,是n-1次(i循環每重復一次執行一次交換)。這個特性使得選擇排序優於其他的排序算法。
C++代碼
#include<iostream> using namespace std; void SelectionSort(int a[], intn) { for (int i = 0; i < n-1; i++) { int min = i; for (int j = i + 1; j < n; j++) { if (a[j] < a[min]) min = j; } swap(a[i], a[min]); } } int main() { int a[] = {89, 45, 68, 90, 29, 34, 17}; SelectionSort(a, sizeof(a) / sizeof(a[0])); for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++) { cout << a[i] << " "; } cout << endl; return 0; }
3.1.1蠻力法之選擇排序