一 桶排序分析
写完了这个桶排序,赶紧睡觉了,明天还要上课,程序猿的悲哀啊,没想到排序一写就停不下来了,,奏是感觉桶排序很帅,帅爆了,排序时间又快,而且也很简单,这种用坐标的记录值得思想很值得借鉴,记得我进实验室的时候,学长就考了一道题,最后发现用桶排序是轻而易举的事,直接上思想了,瞌睡的很啊。
先定义一个数组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.不输出重复元素(只要把上面代码去掉一点就阔以了,在不懂就没办法了)