1.算法思想之排序的简易的桶排序

算法思想:以一个简单的数字排序为例子,申请一个一维数组用来存放数字,将这个一维数组的每一个元素都初始化为零。然后开始计数在输入的数字出现的次数(这个确切的说是计数排序,但计数排序也是桶排序的一种)。具体的看代码实现和注释。`#include
int main()
{
int book[1001],i,l,j,k,n,m;
printf(“请输入排序个数\n”);
scanf("%d",&l);//定义即将要排序的个数
for(i=1;i<=1001;i++)
{
book[i]=0;
}// 将book这个数组的每一个元素都初始化为0
printf(“请输入一串数字我们会排序按照你的要求来排序\n”);
for(i=1;i<=l;i++)//循环输入l个数,进行桶排序
{
scanf("%d",&k);//把每一个数读到变量k中
book[k]++;//进行计数,对编号为k的桶放入一个标记
}
printf(“降序输入1,升序输入其他数字! \n”);
scanf("%d",&m);
if(m==1)//降序
{
for(i=1000;i>=0;i–)//依次判断编号1000——0的桶
for(j=1;j<=book[i];j++)//出现了几次就将这个桶的编号打印几次
printf("%d\t",i);
printf("\n");
}
else//升序
{
for(i=0;i<=1000;i++)//同理可得
for(j=1;j<=book[i];j++)
printf("%d\t",i);
printf("\n");
}
return 0;
}``
那么这对于这个排序来说他的缺点有哪些呢?
如下:
1.占用的空间实在是太大了,假如我要对19999999这样的数字进行排序,那就意味着我至少要19999999+1这么多的桶,岂不是很浪费空间?
2.假如我所需要排序的是6.7,7.7这样的小数呢?,-1,-6这样的负数呢?没法计算,因为没有-1的桶,也没有6.7的桶。所以就要学习其他的算法

你可能感兴趣的:(我的算法学习)