C 實現簡單選擇排序

2021-08-23 14:40:39 字數 1493 閱讀 4131

簡單選擇排序的思想:通過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個的新無序區...