简化版桶排序

来源:互联网 发布:淘宝店铺主营项目 编辑:程序博客网 时间:2024/05/16 05:03

简化版桶排序

思路:

定义一个数组(桶),大小为待排序的最大数字加1,每个桶里初始化为0,遍历待排序的数组,取出每个数字,在对应桶上加一,如数字是3,就在桶[3]上加一,最后遍历全部桶,依次取出数字,即排好序。

代码:

#include <stdio.h>int main() {    int a[11], i, j, t;    int b[9] = {2, 4, 5, 6, 3, 4, 2, 9, 10};    for (i = 0; i < 10; i++) {        a[i] = 0;    }    for(i = 0; i < 9; i++) {        t = b[i];        a[t]++;    }    for (i = 0; i < 11; i++) {        for(j = 0; j < a[i]; j++){            printf("%d ", i);        }    }    return 0;}

时间复杂度

第6行执行m次,第10行执行n次,第15、16行执行m+n次,所以算法时间复杂度为O(2*(m+n)),即O(m+n),即O(M+N)。

问题

浪费空间,如果排序数范围是0~1000,则需要申请1001个变量;

不能排序小数。

0 0
原创粉丝点击