c語言排序演算法_簡單選擇排序演算法(C語言詳解版)
阿新 • • 發佈:2020-12-24
技術標籤:c語言排序演算法c語言選擇排序qvector 結構體排序簡單選擇排序
該演算法的實現思想為:對於具有 n 個記錄的無序表遍歷 n-1 次,第 i 次從無序表中第 i 個記錄開始,找出後序關鍵字中最小的記錄,然後放置在第 i 的位置上。例如對無序表{56,12,80,91,20}
採用簡單選擇排序演算法進行排序,具體過程為:
- 第一次遍歷時,從下標為 1 的位置即 56 開始,找出關鍵字值最小的記錄 12,同下標為 0 的關鍵字 56 交換位置:
- 第二次遍歷時,從下標為 2 的位置即 56 開始,找出最小值 20,同下標為 2 的關鍵字 56 互換位置:
- 第三次遍歷時,從下標為 3 的位置即 80 開始,找出最小值 56,同下標為 3 的關鍵字 80 互換位置:
- 第四次遍歷時,從下標為 4 的位置即 91 開始,找出最小是 80,同下標為 4 的關鍵字 91 互換位置:
- 到此簡單選擇排序演算法完成,無序表變為有序表。
執行結果: 13 27 38 49 49 65 76 97#include #include #define MAX 9//單個記錄的結構體typedef struct { int key;}SqNote;//記錄表的結構體typedef struct { SqNote r[MAX]; int length;}SqList;//交換兩個記錄的位置void swap(SqNote *a,SqNote *b){ int key=a->key; a->key=b->key; b->key=key;}//查詢表中關鍵字的最小值int SelectMinKey(SqList *L,int i){ int min=i; //從下標為 i+1 開始,一直遍歷至最後一個關鍵字,找到最小值所在的位置 while (i+1length) { if (L->r[min].key>L->r[i+1].key) { min=i+1; } i++; } return min;}//簡單選擇排序演算法實現函式void SelectSort(SqList * L){ for (int i=0; ilength; i++) { //查詢第 i 的位置所要放置的最小值的位置 int j=SelectMinKey(L,i); //如果 j 和 i 不相等,說明最小值不在下標為 i 的位置,需要交換 if (i!=j) { swap(&(L->r[i]),&(L->r[j])); } }}int main() { SqList * L=(SqList*)malloc(sizeof(SqList)); L->length=8; L->r[0].key=49; L->r[1].key=38; L->r[2].key=65; L->r[3].key=97; L->r[4].key=76; L->r[5].key=13; L->r[6].key=27; L->r[7].key=49; SelectSort(L); for (int i=0; ilength; i++) { printf("%d ",L->r[i].key); } return 0;}