桶排序:
PS1:将5分、2分、5分、3分和8分,按从小到大的顺序进行排序。
- 自己的程序实例:
#include<stdio.h>
int main()
{
int a[100], i, j, t, n;
scanf("%d",&n); //输入n个数
for(i = 1;i <= n; i++) //循环读入n个数
scanf("%d",&a[i]);
for(i = 1; i <= n - 1; i++)
{
for(j = 1; j <= n -i; j++)
{
if(a[j] > a[j+1]) //此处控制输出结果的排序方向,更改大于小于符号即可
{t = a[j]; a[j] = a[j+1]; a[j+1] = t;}
}
}
for(i = 1; i <= n; i++)
printf("%d", a[i]);
getchar();getchar();
return 0;
}
/*输入题目中的数后
5
5 3 5 2 8
输出结果为23558*/
书中算法实例:
申请一个大小为11的数组 int a[11]。运用数组下标0 ~ 10表示0 ~ 10分(最高分为10分),每次读入一个数,就在数组a的对应处位置加1,以此往复。
a[0]~a[10]中根据每个分数出现的次数进行打印,没有出现则不打印输出。
桶排序算法(完整代码):
#include<stdio.h>
int main()
{
int a[11], i, j, t;
for(i = 0; i <= 10; i++) //此处控制桶排序的打印输出数的排列方向
a[i] = 0;
for(i = 1; i <= 5; i++)
{
scanf("%d",&t);
a[t]++;
}
for(i = 0; i <= 10; i++) //依次判断a[0]~a[10]
for(j = 1; j <= a[i]; j++)//出现几次就打印几次
printf("%d",i);
getchar();getchar();
//这里的getchar();日志的意思,在实例程序一定要写上,平时可以不写
//也可以用别的代替,例如system(“pause”);等来代替
return 0;
}
/*输入题目中的数后
5 3 5 2 8
输出结果为23558
*/
- 此上为简化版的桶排序算法,其本质不能真正算是排序算法,没有办法将人和数值对应,例如成绩栏,只能将成绩排序无法对应该学生,意思是不能将中文和数值结合进行打印。还有一个桶排序占用空间太大,假如所排序的数值范围在一千到一亿就没办法,因为这样就要建立非常巨大的空间来进行对这些数值统计,非常浪费空间。