总结卡片:
怎么写一个排序算法?
程序初衷是解决问题,重点关注流程的设计,怎么去解决问题,而不是关注代码本身。
排序就是从低到高地排队。
事物都能用数值来表达,数值排序很常见。
排序算法很多,这里介绍一个“进化论”算法:
随机拿到两个数字,一左一右,如果左边大于右边,就把两者交换(即总是让左边的小),否则不操作。
把这个操作循环执行上万次,即不断进化,最终可实现升序排序。
设计好流程后,就可以用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它,再执行:
进化论排序结果