1. 程式人生 > >資料結構 簡單選擇排序(C語言實現)

資料結構 簡單選擇排序(C語言實現)

       選擇排序的基本思想:每一趟在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 (int
i = 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; }