1. 程式人生 > 其它 >c語言排序演算法_簡單選擇排序演算法(C語言詳解版)

c語言排序演算法_簡單選擇排序演算法(C語言詳解版)

技術標籤:c語言排序演算法c語言選擇排序qvector 結構體排序簡單選擇排序

該演算法的實現思想為:對於具有 n 個記錄的無序表遍歷 n-1 次,第 i 次從無序表中第 i 個記錄開始,找出後序關鍵字中最小的記錄,然後放置在第 i 的位置上。例如對無序表 {56,12,80,91,20} 採用簡單選擇排序演算法進行排序,具體過程為:
  • 第一次遍歷時,從下標為 1 的位置即 56 開始,找出關鍵字值最小的記錄 12,同下標為 0 的關鍵字 56 交換位置:43d7298cdc00e8d4af3e308983235c0b.png
  • 第二次遍歷時,從下標為 2 的位置即 56 開始,找出最小值 20,同下標為 2 的關鍵字 56 互換位置:2bb3b31ff10cd7b0bd82fcee0a75cb28.png
  • 第三次遍歷時,從下標為 3 的位置即 80 開始,找出最小值 56,同下標為 3 的關鍵字 80 互換位置:c63d6b6ee613754bc3bd8e239328d742.png
  • 第四次遍歷時,從下標為 4 的位置即 91 開始,找出最小是 80,同下標為 4 的關鍵字 91 互換位置:e4b41a262ede576e047e8bd78730911b.png
  • 到此簡單選擇排序演算法完成,無序表變為有序表。
簡單選擇排序的實現程式碼為:
#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;}
執行結果: 13 27 38 49 49 65 76 97

d9e04051d53c82f4589f909679f38eeb.png