基礎概念(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它,再執行:
進化論排序結果