C語言選擇排序程式?
選擇排序是一種簡單排序演算法,它透過查詢陣列中最小的數字並將它放置到第一個位置來工作。接下來遍歷的陣列將從放置最小數字的位置的下一個索引開始。
讓我們舉個例子來更清楚地說明這個概念。
我們有一個數組 {6, 3, 8, 12, 9},在這個陣列中,最小的元素是 3。所以我們將 3 放置在第一個位置,之後陣列將看起來像 {3, 6, 8, 12, 9}。現在我們將再次找到最小的數字,但這次我們不會在搜尋中考慮 3,因為它已經在正確的位置。找到下一個最小的元素 6,建立一個將 6 放置在第二個位置的陣列,然後再次搜尋陣列,直到陣列排序完畢。
選擇排序演算法的工作原理:
選擇排序演算法遵循以下步驟:
讓我們取一個數組 {20, 12, 23, 55, 21}
將陣列的第一個元素設定為最小值。
最小值 = 20
將最小值與下一個元素比較,如果它小於最小值,則將此元素賦值為最小值。一直執行到陣列的末尾。
與 12 比較:20 > 12,最小值 = 12
與 23 比較:12 < 23,最小值 = 12
與 55 比較:12 < 55,最小值 = 12
與 21 比較:12 < 21,最小值 = 12
將最小值放在陣列的第一個位置(索引 0)。
陣列 = {12, 20, 23, 55, 21}
對於下一次迭代,從第一個未排序的元素開始排序,即最小值所在位置的下一個元素。
陣列 = {12, 20, 23, 55, 21}
搜尋從 20 開始,這是最小值所在位置的下一個元素。
迭代 2
最小值 = 20
與 23 比較:20 < 23,最小值 = 20
與 55 比較:20 < 55,最小值 = 20
與 21 比較:20 < 21,最小值 = 20
最小值已到位,無需更改。
陣列 = {12, 20, 23, 55, 21}
迭代 3
最小值 = 23。
與 55 比較:23 < 55,最小值 = 23
與 21 比較:23 > 21,最小值 = 21
最小值移動到索引 = 2
陣列 = {12, 20, 21, 55, 23}
迭代 4
最小值 = 55
與 23 比較:23 < 55,最小值 = 23
最小值移動到索引 3,陣列 = {12, 20, 21, 23, 55}
示例
#include <stdio.h> int main() { int arr[10]={6,12,0,18,11,99,55,45,34,2}; int n=10; int i, j, position, swap; for (i = 0; i < (n - 1); i++) { position = i; for (j = i + 1; j < n; j++) { if (arr[position] > arr[j]) position = j; } if (position != i) { swap = arr[i]; arr[i] = arr[position]; arr[position] = swap; } } for (i = 0; i < n; i++) printf("%d\t", arr[i]); return 0; }
輸出
0 2 6 11 12 18 34 45 55 99