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