1. 程式人生 > >資料結構之排序篇——選擇排序 //交換第i下標與最小下標,只交換一次

資料結構之排序篇——選擇排序 //交換第i下標與最小下標,只交換一次

首先在陣列的所有元素中找到一個最小的元素,

將該元素與陣列的第一個元素進行交換,

這樣交換之後,陣列的第一個元素就變成了陣列元素中的最小值,

    再在除第一個元素外的其它陣列元素中,尋找最小的陣列元素,

    將這個第二小的陣列元素與陣列的第二個位置的元素進行交換,

    這樣交換之後,陣列的第二個元素就變成了陣列元素中的第二小的值

key: 實現選擇排序演算法時,需要使用巢狀的兩個迴圈來實現:外層迴圈用於控制排序的趟次,裡層迴圈用於尋找指定範圍內的最小值。

typedef int DataType;
void selects(DataType *a, int n) {
    for (int i = 0; i < n - 1; i++) {
        int k = i; //這裡認為k就是最小
        for (int j = i + 1; j < n; j++) {
            if (a[j] < a[k]) {
                k = j;
            }
        }
        if (k != i) {
            swap(a[k], a[i]);
        }
    }
}
void print(DataType* a, int n) {
    for (int i = 0; i < n; i++)
        printf("%d ", a[i]);
    printf("\n");
}
int main() {
    int a[10] = {3, 2, 4, 5, 7, 8, 9, 1, 6, 0};
    
    selects(a, 10);
    print(a, 10);
    return 0;
}