選擇排序

概念

選擇排序(selection sort):一種簡(jiǎn)單直觀的排序算法。

原理

每一次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個(gè)元素,存放在序列的起始位置,直到全部待排序的數(shù)據(jù)元素排完。

處理流程

  1. 從待排序序列中,找到關(guān)鍵字最小的元素;
  2. 如果最小元素不是待排序序列的第一個(gè)元素,將其和第一個(gè)元素互換;
  3. 從余下的 N - 1 個(gè)元素中,找出關(guān)鍵字最小的元素,重復(fù)(1)、(2)步,直到排序結(jié)束。
圖片.png

算法描述(C語(yǔ)言)

void selection_sort(int *a, int len) {
    int temp, min_index;
    for (int i = 0; i < len; i++) {
        min_index = i;
        for (int j = i + 1; j < len; j++) {
            if (a[j] < a[min_index]) {
                min_index = j;
            }
        }
        if (i != min_index) {
            temp = a[i];
            a[i] = a[min_index];
            a[min_index] = temp;
        }
    }
}

int main() {
    int a[] = {9, 1, 2, 5, 7, 4, 8, 6, 3, 5};
    int len = sizeof(a)/sizeof(int);
    selection_sort(a, len);
    for (int i = 0; i < len; i++) {
        printf("%d\n", a[i]);
    }
    return 0;
}

算法穩(wěn)定性

選擇排序兩個(gè)相同的元素排序結(jié)束后位置可能發(fā)生變化,所以選擇排序是不穩(wěn)定的排序算法。

算法分析

時(shí)間復(fù)雜度:O(n2)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容