基礎概念(4):怎麼寫一個排序演算法

總結卡片:

卡片

怎麼寫一個排序演算法?
程式初衷是解決問題,重點關注流程的設計,怎麼去解決問題,而不是關注程式碼本身。
排序就是從低到高地排隊。
事物都能用數值來表達,數值排序很常見。
排序演算法很多,這裡介紹一個「進化論」演算法:
隨機拿到兩個數字,一左一右,如果左邊大於右邊,就把兩者交換(即總是讓左邊的小),否則不操作。
把這個操作循環執行上萬次,即不斷進化,最終可實現升序排序。
設計好流程後,就可以用c來寫了:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    int arr[] = {890,19,10,12,4,20,6,11,3,100,23,44,12,130,3000,34};
    int count = sizeof arr / sizeof *arr;
    for (int i=0; i<count; i++) {
        printf("%d,",arr[i]);
    }
    printf("\n");
    unsigned int times=0;
    srand(time(0));
    while (times < 1000) {
        int i = rand()%count;
        int j = rand()%count;
        if (i < j && arr[i] > arr[j]) {
            int tmp = arr[i];
            arr[i]=arr[j];
            arr[j]=tmp;
        }
        times++;
    }
    printf("\n");
    for(int i=0; i<count; i++) {
        printf("%d,", arr[i]);
    }
    printf("\n");

    return 0;
}

cc它,再執行:

進化論排序結果進化論排序結果

Tags: