2025年4月28日 星期一 乙巳(蛇)年 正月廿九 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

桶排序算法(C语言实现)

时间:10-16来源:作者:点击数:75

桶排序法的基本思想:将数据分到有限数量的桶里,每个桶里的数再进行排序。简单来说,就是把数据分组,放在一个个的桶中,然后对每个桶里面的数再进行排序。

例如,对 [1,100] 范围内的 n 个整数 a[1,n] 进行排序,步骤如下。

  • 将这类排序分为 3 个桶:第 1 个桶(数组 a)的整数范围为 [1,10]、第 2 个桶(数组 b)的整数范围为 [11,50]、第 3 个桶(数组 c)的整数范围为 [51,100]。
  • 对这 n 个数进行从头到尾的扫描,将 1 到 10 之间的数放在数组 a 中,将 11 到 50 之间的数放在数组 b 中,将 51 到 100 之间的数放在数组 c 中。
示例

使用桶排序法对数列 [5,2,30,98,20,1,45,80] 从小到大排序。C语言编程代码如下:

  • #include<stdio.h>
  • int main()
  • {
  • int m[8]={5,2,30,98,20,1,45,80};
  • int a[10]={0}; /*数组a存放[1,10]的数,将数组a赋值为零*/
  • int b[40]={0}; /*数组b存放[11,50]的数,将数组b赋值为零*/
  • int c[50]={0}; /*数组c存放[51,100]的数,将数组c赋值为零*/
  • int i;
  • for(i=0;i<8;i++)
  • {
  • if((m[i]>0)&&( m[i]<11))
  • a[m[i]-1]=1; /*假如i=0,那么m[i]=5;将5放在数组a的第5个位置,即a[4]中,所以是a[m[i]-1] */
  • if((m[i]>10)&&( m[i]<51))
  • b[m[i]-10-1]=1;
  • if((m[i]>51)&&( m[i]<101))
  • c[m[i]-50-1]=1;
  • }
  • for(i=0;i<10;i++) /*输出数组a的结果*/
  • if(a[i]==1) printf(" %d ",i+1);
  • for(i=0;i<40;i++) /*输出数组b的结果*/
  • if(b[i]==1) printf(" %d ",i+11);
  • for(i=0;i<50;i++) /*输出数组c的结果*/
  • if(c[i]==1) printf(" %d ",i+51);
  • printf("\n");
  • }

运行结果:

1   2   5   20   30   45   80   98

本例定义了 3 个数组,分别存放 [1,10]、[1 1,50]、[51,100] 的数。将序列 m 中对应的数放在对应的数组中,并标记为 1。

例如,45 属于 [11,50] 之间的数,所以放在数组 b 中,数组 b 总共有 40 个元素,11 放在 b[0]、12 放在 b[1]……所以 45 应该放在 b[45-11]=b[34] 中。

将 m 中的数存放在对应的数组元素的过程,已经完成了从小到大的排序。

在输出结果的时候,只要数组 a、b、c 中的元素为 1,就表示这个元素的位置代表序列 M 中的数,所以只需要输出数组元素为 1 的位置上的数据即可。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门