基础概念(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: