簡單選擇排序的思想:通過n
−in −i
次關鍵字間的比較,從n−
i+1 n−i
+1
個記錄中選出關鍵字最小的記錄,並和第i(
1<=
i<=n)
i (1
<=
i<=n)
個記錄交換之。這句話比較晦澀,我們可以通過乙個例子來說明。
舉例說明:
對於序列為的序列:
第一步,記錄為0的關鍵字為9,與記錄為0之後的所有記錄的關鍵字相比較,找到關鍵字最小的記錄,對於上述序列,記錄為2的關鍵字最小為1,所以經過第一步序列變成;
第二步,記錄為1的關鍵字為3,與記錄為1之後的所有記錄的關鍵字相比較,由於記錄為1的關鍵字3最小,所以不需要交換,經過這一步序列沒有變化;
以此類推,第三部序列變成,結束(只需要到n-1即可)。
**實現:
#include
using
namespace
std;
void showarr(int arr, int length);
void selectsort(int arr, int length);
void swap(int arr, int i, int j);
int main()
; int length = sizeof(arr) / sizeof(int);
showarr(arr, length);
selectsort(arr, length);
showarr(arr, length);
system("pause");
return0;}
void showarr(int arr, int length)
void selectsort(int arr, int length)
if (i != min)
swap(arr, i, min);
}}void swap(int arr, int i, int j)
程式實現細節:
對於每次迴圈,當發現前面的關鍵字比後面的關鍵字大時,沒有直接進行交換,而是通過min保留較小值的記錄,到最後全部遍歷完在交換,會比每次發現就交換節省時間成本。
時間複雜度分析:
第一次迴圈需要n−
1 n−1
,第二次迴圈需要n−
2 n−2
,第三次需要n−
3 n−3
,以此類推,總的時間複雜度為:n−
1+n−
2+..
.+2+
1=n(
n−1)
/2n −1
+n−2
+...
+2+1
=n(n
−1)/
2.
排序演算法(C實現) 簡單選擇排序
選擇排序的基本思想是 每一趟在n i i 0,1,2,n 2 個記錄中選取關鍵字最小的記錄作為有序列序列中第i個記錄。其中最簡單且最熟悉的是簡單選擇排序。一趟簡單選擇排序的操作為 通過n i次關鍵字之間的比較,從n i個記錄中選出關鍵字最小的記錄,並和第i個記錄交換。主要步驟 1.求出n i個關鍵字...
C 簡單選擇排序
基本思想 第i趟在n i 1 i 1,2,n 1 個記錄中選取關鍵碼最小的記錄作為有序序列的第i個記錄。需要解決的問題?1 如何在待排序序列中選出關鍵碼最小的記錄?2 如何確定待排序序列中最小的記錄在有序序列中的位置?簡單選擇排序實質是一種交換排序,從待排序序列中選取最小的記錄與待排序序列中的最後乙...
簡單選擇排序 簡單選擇排序詳解
n個記錄的檔案的直接選擇排序可經過n 1趟直接選擇排序得到有序結果 初始狀態 無序區為r 1.n 有序區為空。第1趟排序 在無序區r 1.n 中選出關鍵字最小的記錄r k 將它與無序區的第1個記錄r 1 交換,使r 1.1 和r 2.n 分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區...