最简单的排序算法-桶排序
Posted 嵌入式Linux
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最简单的排序算法-桶排序相关的知识,希望对你有一定的参考价值。
前面扯皮
顾名思义,桶排序肯定是和桶相关的,可以是木桶,也可以是铁桶,也可以是其他的扯鸡巴的桶,所以统称为桶排序。如果在笔试面试过程中,突然要求里写个排序算法,但是因为紧张写不出来,可以考虑一下桶排序,因为这个排序就是为了我们这样比较笨的人准备的,你就想下,有多少笔数据,你就准备多少个桶,然后把数据的值扔到编号一致的桶里面去,哈哈。
什么是桶排序?
桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。 每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。
举例子说明
有一个人民教师,名字叫做 阿布,这个阿布老师教的是 体育课,期末考试了,阿布老师给全班50个人进行了跳远项目,跳高项目,100米跑步项目,每个项目都进行了打分,然后每个人的成绩都分别用一个 成绩单记录,考试结束后,阿布老师在回办公室里的路上遇到教学主任,然后遇到了下面的对话。
阿布:主任好啊。
教学主任:阿布老师,你们班的考试成绩出来了吗?
阿布:出来了,出来了
教学主任:赶紧排下名次,今年的期末成绩排名就差体育了。
阿布:好好好~~~
阿布老师脑子不好,虽然打篮球很厉害,但是对排序这种的,怎么办啊?
阿布坐在教室里,突然看到教室后面有100个垃圾桶,以前校运会买来给学生当凳子坐的,阿布把100个垃圾桶依次排开,然后给100个垃圾桶都写上了编号1~100,阿布老师为自己的智商如此高超非常兴奋,先是自嗨的唱了一首歌,然后开始干活了,第一个学生的成绩是53,他把这个学生的成绩单放到53号桶,第二个学生的成绩是64,他把这个学生的成绩单放到64号桶,第三个学生的成绩又是53,他又把这个学生的成绩单放到53号桶~~(过了半个小时),阿布终于把所有学生的成绩扔到垃圾桶里了。然后阿布长笑一声,哈哈哈,终于完成了排序。
代码实现
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define random_set(a,b) ((rand()%(b-a))+a)//获取a~b范围内的随机数
int main(void)
{
int array_stu[50];//用来保存每个同学的分数
int array_out[100];//用来保存排序后的数据
srand((int)time(NULL));//设置随机数的基准,这样保证每次的运行结果不同
/*先初始化两个数组*/
memset(array_stu, 0, sizeof(array_stu));
memset(array_out, 0, sizeof(array_out));
/*用程序随机数给50个学生打分*/
for(int i=0;i<50;i++)
{
array_stu[i] = random_set(1,99);
}
/*把50个学生的分数分别扔到对应的桶里面去*/
for(int i=0;i<50;i++)
{
for(int j=1;j<100;j++)
{
/*如果分数跟桶的编号一样,就把这个桶的数据增加*/
if(array_stu[i] ==j)
{
array_out[j] ++;
}
}
}
/*把排序后的数据输出*/
for(int i=0;i<100;i++)
{
/*有些同学的分数是一样的*/
while(array_out[i] > 0)
{
printf("%d
",i);
array_out[i]--;
}
}
return (0);
}
程序输出
3
9
9
9
12
12
14
18
19
20
23
26
28
32
33
36
37
38
41
42
42
48
48
49
53
55
56
59
62
63
69
69
70
72
73
76
76
78
84
84
84
84
85
88
89
90
91
91
93
95
时间复杂度
具体看之前的文章
觉得不错,请帮忙转发,点好看,您的每一次支持,我都将铭记于心
以上是关于最简单的排序算法-桶排序的主要内容,如果未能解决你的问题,请参考以下文章