C语言实现简化版桶排序

Posted 暮冬既望

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言实现简化版桶排序相关的知识,希望对你有一定的参考价值。

问题:编写一个程序,让计算机随机读入指定数量的指定范围内的数然后将这些数从大到小输出。

举例:现在共有 5 8 5 3 1 五个数,编写一个程序,使这五个数从大到小排序

解决:这里只需要借助一个一维数组就可以搞定。

首先申请一个大小为9的数组 int num[9],将 num[0]~num[9] 全部初始化为0,表示这些数还没有输入。例如 num[2]=0 就是说目前还没有出现 2 这个数,同理 num[5]=0 就是说还没有出现 5 这个数。

下面开始输入数据,第一个数是 5 ,那么对应的 num[5] 就要在原来的基础上自增 1,表示 5 这个数出现了一次;以此类推,输入剩下的四个数,也就是对应的 num[n] 在原来基础上自增 1.

数据输入完毕后,会发现数组的值发生了改变

因为 5 出现了两次,所以对应的 num[5] 的值就变为 2 ,同理 num[8],num[3],num[1] 的值也发生了相应改变。

输入完毕后,输出这些数,就实现了数据从大到小输出的问题。

#include <stdio.h>
int main(){
int num[9],i,t,j;

for(i=0;i<9;i++){
num[i] = 0;
}
for(i=0;i<5;i++){
scanf("%d",&t);
num[t]++;
}
for(i=9;i>=1;i--){
for(j=1;j<=num[i];j++){
printf("%4d",i);
}
}

getchar();
return 0;
}

以上的排序方法就是简单的桶排序,实现原理就是创建对应数量的桶,每个桶的编号就是下标,每出现一个数,就在对应编号的桶中放一个小旗,最后只需要数每个桶中有几个旗就ok了。

简化版桶排序并不是真正的排序算法,因为它的致命问题就是浪费空间。为此,需要学习冒泡排序,节省空间。


以上是关于C语言实现简化版桶排序的主要内容,如果未能解决你的问题,请参考以下文章

数据结构——简易版桶排序,冒泡排序,快速排序(C实现)

手撕C语言标准库qsort(自我实现简化高效版C风格泛型快排)

为啥我的 C 代码片段不起作用?简化版可以。为 unsigned long long 传递不带 VA_ARGS 的 args

c语言实现哈希排序代码

C语言快速排序代码

C语言实现九大排序算法(建议收藏!)