資料結構 簡單選擇排序(C語言實現)
阿新 • • 發佈:2019-02-07
選擇排序的基本思想:每一趟在n-i+1(i=1,2,3,…,n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。
演算法思想
第一趟簡單選擇排序時,從第一個記錄開始,通過n-1 次關鍵字比較,從n 個記錄中選出關鍵字最小的記錄,並和第一個記錄進行交換。
第二趟簡單選擇排序時,從第二個記錄開始,通過n-2 次關鍵字比較,從n -1個記錄中選出關鍵字最小的記錄,並和第二個記錄進行交換。
......
第i趟簡單選擇排序時,從第i個記錄開始,通過n-i 次關鍵字比較,從n - i + 1個記錄中選出關鍵字最小的記錄,並和第i個記錄進行交換。
如此反覆,經過n-1 趟簡單選擇排序,將第n-1 個記錄排到位,剩下一個最小記錄直接在最後,所以共需進行n-1 趟簡單選擇排序。
原始碼
#include<stdio.h> typedef int KeyType; typedef struct { KeyType key; }RecordType; void SelectSort(RecordTyper[],int length) //簡單選擇排序 { int x; //假設待排序列有n個數,從第一個數開始依次與其後面的數比較,需要比較n-1次 for (inti = 1; i <=length-1;i++) { int k = i; for (int j = i + 1; j <=length; j++) //j從2開始 { if (r[j].key <r[k].key) { k = j; } } if (k != i) //當r[j].key>=r[k].key將r[k]的值藉助中間變數X與x[i]的值交換 { x = r[i].key; //r[i].key為最小數 r[i].key = r[k].key; r[k].key = x; } } } void ShowResult(RecordType*r,int length) //輸出結果 { for (int i = 1; i <=length; i++) { printf("%d\t", r[i]); } } int main() { RecordType r[] = { 0, 8, 2, 9, 7, 3, 6, 4, 5, 1, 0 }; int length = sizeof(r) / sizeof(r[0]) - 1; SelectSort(r, length); ShowResult(r,length); printf("\n"); return 0; }