算法-桶排序(简化版)

今天开始研究算法,网上找了本书《啊哈,算法》,准备把这本有趣的书研究个透彻,有些图是引用书中的图,在此声明一下。不说了,上第一种算法:桶排序


int main(int argc, const char * argv[]) {

@autoreleasepool {

//排序法

int a[11],t;

for (int i=0; i<=10; i++) {// 初始化数组元素,都为0,可把每个元素当做一个桶,且桶里都为0

a[i] = 0;

}

for (int i=1; i<=5; i++) {//输入五个[0,10]的数,把输入的数分别放入对应的桶中

printf("请输入第%d个数:",i);

scanf("%d",&t);

a[t]++;

}

printf("由小到大排序后:");

for (int i=0; i<=10; i++) {//依次判断a[0]-a[10]

for (int j=1; j<=a[i]; j++) {//出现几次就打印几次

printf("%d ",i);

}

}

printf("\n由大到小排序后:");

for (int i=10; i>=0; i--) {

for (int j=1; j<=a[i]; j++) {

printf("%d ",i);

}

}

printf("\n");

/*

请输入第1个数:5

请输入第2个数:4

请输入第3个数:9

请输入第4个数:7

请输入第5个数:2

由小到大排序后:2 4 5 7 9

由大到小排序后:9 7 5 4 2

*/

}

return 0;

}

小结:

优点:速度快

缺点:占内存空间,假如需要对千万个数进行排序,那就要申请千万个变量,又或者需要给199999、323、1、89、101进行排序,那就要定义int a[200000]了,浪费空间,再者如果去对1.2,2.3,10.4,3.9,1.8进行排序,这个排序法就无法排序了。

故此算法适合小范围整数排序。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容