算法笔记-桶排序原理与实现

算法笔记-桶排序原理与实现

1.什么是桶排序?
  桶排序是一种排序算法,实际上并没有进行比较排序,而是借助了数组。

2.实现原理
  假定有1-100个编号的桶(既定义一个长度为100的整型一维数组),每输入一个数字·就在对应的桶上插一个小旗(也就是对应下标的桶加1次),如果这个数字出现了n次就在对应桶上插n个小旗,当所有数输入完毕时,只需要从下标1开始找那些数字是1,如果是1就打印1次,是2就打印2次,是多少就打印多少次。

3.疑惑点
  为什么我们没有比较大小就排序出来了呢?因为数组下标本身就是已经排好了,只要出现一次数就在对应下标上+1,然后遍历数组中那些大于1就行。但是判断大于1不能用if判断,如果用if如果数字出现了两个虽然下标对应的数已经大于1但是只会打印一次,会造成数据丢失的bug

4.优缺点
缺点:

使用桶排序占用内存很大,若果需要排序的数字是1和10000这两个数,就必须定义10000个桶,因为必须在10000这个桶上插小
旗;由于桶的标号只能是整数(数组下标原因)所以他并不能排序小数,只能排序整数,且如果有负数那么代码量将大大增
加,效率不在那么高

优点:

相比冒泡排序桶排序程序实现更加简单,而且效率也高了很多,由于冒泡排序的双层
for在排序的数字很多时则会使效率变得很低。

5.桶排序c语言代码

#include<stdio.h>
int main(){
    int improt;		//申明整型数组,相当于申明了100个桶[100]
    int array[100];	//用于接受键盘输入的数
    for(int i=0;i<100;i++){	
		array[i] = 0;	//把数组赋值为0,也就是每个桶都没被占用过
    }
    for(int j=1;j<=5;j++){
    	scanf("%d",&improt);	//循环录入要比较的5个数
    	array[improt]++;	//输入的是数字几,就在对应桶上+1次,表示被占用了
    }
    for(int k=0;k<100;k++){		//把数组拿出来看看,当然其中可能也有为0的数,国为没被占
        for(int z= 0;z<array[k];z++){	//可能你想的是用if判断是不是1,但是如果此数字出现了两次呢?
            printf("%d",k);
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值