数据结构排序之桶排序

本文介绍了桶排序算法,强调其快速且简单的特性。通过创建一个辅助数组b,将待排序数组a的值作为b数组的下标进行计数,以此实现排序。文章提供了代码示例,并展示了如何处理重复元素,既可以选择输出,也可以选择不输出。
摘要由CSDN通过智能技术生成

 一  桶排序分析

     写完了这个桶排序,赶紧睡觉了,明天还要上课,程序猿的悲哀啊,没想到排序一写就停不下来了,,奏是感觉桶排序很帅,帅爆了,排序时间又快,而且也很简单,这种用坐标的记录值得思想很值得借鉴,记得我进实验室的时候,学长就考了一道题,最后发现用桶排序是轻而易举的事,直接上思想了,瞌睡的很啊。

     先定义一个数组a,用来放要排序的值,然后呢,在定义一个数组b,这个b数组下标要特别的注意,a数组的最大值不能超过b数组的下标值,因为我们是把a数组的值放在b数组的下标里面,当a数组的的一个值等于b数组的一个下标时,该下标b数组的值+1(刚开始初始化b数组为0),最后输出的时候注意一点啊,如果你想剔除重复元素,直接用一层循环输出加个判断条件  if(b[i]>0),如果不想剔除重复元素,那简单啊,直接在加个for语句,结束用b[j]的值控制,为什么呢?因为在当初存储的时候,每a数组的的一个值等于b数组的一个下标时,b[i]++,现在应该秒懂吧,贴完图片和代码就碎觉。

 二  代码

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{   
	int i,j;
	int a[10];   // 就用10个数
        int b[100]={0};     //对b数组初始化为0
	srand((unsigned)time(NULL));
	printf("\n输出乱序数组:");
	for(i=0;i<10;i++)
	{
	    a[i]=rand()%10+10; //产生10~20之间的数
	    printf("%d ",a[i]);
	    b[a[i]]++;
	}
	printf("\n输出排序数组:");
	for(i=0;i<20;i++) //因为产生的是最大值是19,我用了20
	{
	
		for(j=0;j<b[i]&&b[i]>0;j++)
		   printf("%d ",i);
	}
	printf("\n");
	return 0;
}


 

 

 

三  结果演示

     1. 输出重复元素

         

        2.不输出重复元素(只要把上面代码去掉一点就阔以了,在不懂就没办法了)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值