排序——桶排序

假设现在有5个数字需要排序,分别是1 5 5 8 6;现在需要对这5个数字由小到大进行排序

-1.首先是申请一个一维数组,这里我申请一个大小为11的数组int a[11],这样就可以对大小为0~10的数字进行排序【上面给出的5个数字中最大的是8,所以我们也可以申请一个大小为9的数组(0~8)】,在开始的时候,将数组a[0]到a[10]都初始化为0,表示为0~10的数字都还没有出现过。例如:a[0]=0表示0这个数字还没有出现过,a[1]=2表示1这个数字出现过两次。

int a[11];
for(int i=0;i<=10;i++){
a[i]=0;
}

-2.处理数字
第一个数字是1,那么就将对应的a[1]的值在原来的基础上增加1,表示1出现过一次。
第二个数字是5,就将对应的a[5]的值在原来的基础上增加1,表示5出现了一次。
第三个数字是5,就将对应的a[5]的值在原来的基础上增加1,即a[5]=2,表示5出现2次……同理余下的其他数字也是按照这种方法进行赋值。全部完毕后,a[1]=1,a[5]=2,a[6]=1,a[8]=1。其他均为0
-3.打印数字
数组a[0]~a[10]的值表示的就是0~10这11个数字出现的次数,只需要将出现过的数字打印出来,就完成了对数字的排序。

forint 1=0;i<=10;i++){
for(int j=1;j<=a[I];j++ ){
printf(“%d”,i);
}
}
最后输出数据就是 1 5 5 6 8
如果要改为从大到小排序,只需要将输出部分的循环改为for(int i=10;i>=0;i- -)

总结:桶排序更适合数字较为集中,而且只要求对数字进行排序的情况。例如对1 0 21000000 20000001 3这样子的5个数进行排序,你要需要申请21000000个“桶”来进行排序,这样会变得十分浪费空间,而且当需要排序的数不是整数,而是一些小数 的时候,使用桶排序也是极其不方便的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值