No.1.1 排序 - 桶排序
一、简单的桶排序:非常浪费空间!而且限制较多!时间复杂度O(N+M)
EG1. 编写一段程序,让计算机随机读入5 个数然后将这5 个数从大到小输出?
#include
int main() // int表示返回值,无需返回值用void
{
int a[11],i,j,t; //变量必须先申明,后使用
for(i=0;i<=10;i++) //根据输入值得范围,初始化桶大小
a[i]=0;
for(i=1;i<=5;i++) //循环读入5个数值
{
scanf("%d",&t); // a[t] = t
a[t]++;
}
for(i=0;i<=10;i++) // *_* //
for(j=1;j<=a[i];j++) // a[i] >= 1, 所以此处只输出非空桶
printf("%d ",i);
//getchar();getchar(); //这里的getchar();用来暂停程序,以便查看程序输出的内容,也可以用system("pause");等来代替
return 0;
}
很显然,上述代码实现的是从小到大的输出;如果要完成从大到小的输出,// *_* // -> for (i=10;i>=0;i--)
注意C语言的语法:
1.变量必须先申明,后使用
2.每一条执行语句,以 “;” 结尾;循环控制语句不算执行语句,故无需以 “;” 结尾
3.多条执行语句在同一个控制块内,最好以 { } 修饰
4.return 返回值要与 main 的声明相对应
5.最重要的是,程序必须放在project里面,如果单独以文件方式运行,会出现莫名其妙的问题
EG2. 尝试一下输入 n 个0~1000 之间的整数,将它们从大到小排序。
# include
int main()
int book[1001], i, j, n, t;
for (i=0; i<=1000; i++)
book[i] = 0;
scanf("%d", &n);
for (i=1; i<=n; i++)
{
scanf("%d", &t);
book[t]++;
for (i = 1000; i>=0; i--)
for (j=1;j<=book[i]; j++)
printf("%d", i);
getchar();
return 0;