C 選擇排序

2022-08-20 05:33:10 字數 1367 閱讀 2266

選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小元素,然後放到排序序列末尾。以此類推,直到所有元素均排序完畢。

1 #include 

2 #include 34

void selection_sort(int data, int count)

5 18 }

1920

int main()

21 ;

23 selection_sort(number, 10);

24int i;

25for(i = 0; i < 10; i ++)

26 printf("

%d\n

",number[i]);

27 exit(0);

28 }

012

3456

789

選擇排序的交換操作介於0和(n − 1)次之間。選擇排序的比較操作為n(n − 1) / 2次之間。選擇排序的賦值操作介於0和3(n − 1)次之間。比較次數o(n^2),比較次數與關鍵字的初始狀態無關,總的比較次數n=(n-1)+(n-2)+...+1=n*(n-1)/2。 交換次數o(n),最好情況是,已經有序,交換0次;最壞情況是,逆序,交換n-1次。 交換次數比氣泡排序少多了,由於交換所需cpu時間比比較所需的cpu時間多,n值較小時,選擇排序比氣泡排序快。

每一趟從待排序的資料元素中選出最小(或最大)的乙個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。

選擇排序是不穩定的排序方法(很多教科書都說選擇排序是不穩定的,但是,完全可以將其實現成穩定的排序方法)。

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(1≤i≤n-1)。該趟排序從當前無序區中選出關鍵字最小的記錄 r[k],將它與無序區的第1個記錄r交換,使r[1..i]和r分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。

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

優點:移動資料的次數已知(n-1次);

缺點:比較次數多,不穩定。

排序 選擇排序(C )

1 選擇排序的核心思想是 1 第1趟排序是從第 1個元素 後面的 n 1 個元素中選擇乙個值最小於第1 個元素的元素與第 1個元素交換位置 2 第2 趟排序是從第 2個元素後面的 n 2個元素中選擇乙個值最小於第 2個元素的元素與第 2個元素交換位置 3 以此類推,知道第n 1 趟,排序結束。第 i...

選擇排序 C

選擇排序的時間複雜度為o n n 空間複雜度為o n 邏輯分析 1 假設陣列中的最小數為a 0 然後比較陣列中其他數與a 0 的大小,若a i 2 然後繼續將a 1 中存訪後面元素最小的,一直到排序完成。是不是很簡單,對,就這麼簡單。include includeusing namespace st...

c 選擇排序

每一趟從待排序的資料元素中選出最小 或最大 的乙個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。選擇排序是穩定的排序方法。示例 初始關鍵字 49 38 65 97 76 13 27 49 第一趟排序後 13 38 65 97 76 49 27 49 第二趟排序後 13 27 65...