最快最简单的排序——————“桶排序”
2016-05-27 00:31
204 查看
先来看一个问题:有一列(0~10)随机数 5 3 5 2 8 ,现在要求将它们按照从先到大的顺序或从大到小的顺序排列,如何去做?
在这里可以需借助一个一维数组就可以解决这个问题,首先申请一个大小为11 的数组int a[11]编
号从a[0]~a[10]。刚开始的时候,将a[0]~a[10]都初始化为0,然后进行这一列随机数的输入,将每一个数的数值对应到这个数组所对应的序号的数值加一,即
依次数组a的各个数值为:
接下来,需要将数组中出现过的数值不是0的数打印出来就可以了,出现几次就打印几次。
具体代码为:
#include <stdio.h>
#define M 11
int main(void)
{
int a[M],i,j,t;
for(i=0;i<=10;i++)
a[i]=0; //初始化为0
for(i=1;i<=5;i++) //循环读入5个数
{
scanf("%d",&t); //把每一个数读到变量t中
a[t]++; //进行计数
}
for(i=0;i<=10;i++) //依次判断a[0]~a[10]
for(j=1;j<=a[i];j++) //出现了几次就打印几次
printf("%d ",i);
getchar(); //这里的getchar();用来暂停程序,以便查看程序输出的内容
}
其实这并不是真正的桶排序算法,真正的桶排序算法要比这个更加复杂,期待以后的讲解!
在这里可以需借助一个一维数组就可以解决这个问题,首先申请一个大小为11 的数组int a[11]编
号从a[0]~a[10]。刚开始的时候,将a[0]~a[10]都初始化为0,然后进行这一列随机数的输入,将每一个数的数值对应到这个数组所对应的序号的数值加一,即
依次数组a的各个数值为:
接下来,需要将数组中出现过的数值不是0的数打印出来就可以了,出现几次就打印几次。
具体代码为:
#include <stdio.h>
#define M 11
int main(void)
{
int a[M],i,j,t;
for(i=0;i<=10;i++)
a[i]=0; //初始化为0
for(i=1;i<=5;i++) //循环读入5个数
{
scanf("%d",&t); //把每一个数读到变量t中
a[t]++; //进行计数
}
for(i=0;i<=10;i++) //依次判断a[0]~a[10]
for(j=1;j<=a[i];j++) //出现了几次就打印几次
printf("%d ",i);
getchar(); //这里的getchar();用来暂停程序,以便查看程序输出的内容
}
其实这并不是真正的桶排序算法,真正的桶排序算法要比这个更加复杂,期待以后的讲解!
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析