坚持写算法第一天,先来一个桶排序,为什么叫“假的”桶排序,因为它是一个简化版的,真正的桶排序比这个复杂的多,第一天写算法,先来个简单点的(偷懒)!
我们假设输入五个数,这五个数的范围在0到10,然后按从大到小的顺序输出!简单粗暴,直接上代码吧!
#include<stdio.h>
int main(){
int a[11],i,j,t;//假设我们要比较的数范围在0 —10,所以就定义了一个大小为11的数组
for(i=0;i<=10;i++)
a[i]=0;//初始化为0
for(i=1;i<=5;i++){//循环输入5个数
scanf("%d",&t);//把输入的每个数读到变量t中
a[t]++;//进行计数
}
for(i=10;i>=0;i--)//依次判断a[10]-a[0]
for(j=1;j<=a[i];j++)//出现几次就打印几次
printf("%d",i);
system("pause");//暂停程序,查看输出的内容
return 0;
}
简单解释一下,我们可以把它看成有11个桶,每个桶里面装有沙子,给每个桶从0–10进行编号。每当我们输入一个0–10之间的数,就在对应编号的桶上插上一面旗子,对应的桶编号出现几次就有几面旗子。比如输入一个5,就在5号桶上插上一面旗子,有几面旗子就表示出现了几次,比如10号桶上有2面旗子,表示10出现了两次。原理还是很简单的,因为它是“假的”,真正的桶排序比这个肯定要难!
计划是每天写一道算法题,但是也要结合自己的实际情况,毕竟这和智商还是有点关系的,碰上难的算法题,自己应该会啃好几天,不管时间多久,都要坚持学习,很喜欢这个过程,过程让自己成长。以后也会常分享,可能有些写的不太好,欢迎各位赐教。