/* 程式功能:選擇排序法(selection sort):輸入數個數值,並以選擇排序法由小至大將數值排序*/
/* 輸入:data[1], data[2], ..., data[n],共n個資料*/
/* 輸出:data[1], data[2], ..., data[n];其中i < j,data[i] <= data[j] */

#include <stdio.h>      /* Selection Sort */

void main(void) {
    int data[50];
    int i, j, n, temp, min, k; /* min 代表數列中最小的值 ; k 代表目前 min 的位址 */

    printf("輸入數值的個數: ");    /*輸入n */
    scanf("%d" ,&n);
    printf("\n");

    for (i=1;i<=n;i++) {      /*輸入n個數值 */
        printf("請輸入數值:");
        printf("data[%d]=",i);
        scanf("%d",&data[i]);
    }

    for (i=1; i<n; i++) {
        min = data[i];  /* 紀錄 min 為 data[i] */
        k = i;                  /* 紀錄 min 的位址為 k */
        for(j=i+1; j<=n; j++) {
            if (data[j]<min) { /* 比較 data[j] 是否小於 min */
                min = data[j];  /* 將 min 紀錄為 data[j] */
                k = j;          /* 將 min 的位址 k 改為 j */
            }
        }
        temp = data[i];   /* 將 min 與 data[i] 互換 */
        data[i] = data[k];
        data[k] = temp;
    }
    printf("\n資料排序後為\n");     /* 列出排序好的結果 */
    for(i = 1; i <= n; i++) {
        printf("%d ", data[i]);
    }
    printf("\n");
}

--Back--