欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

“桶排序”(简化版)

程序员文章站 2022-05-13 21:24:30
...

排序问题:
简单说就是现在给定10个空的桶,编号0~9。每个桶都有自己的编号,如果输入的数据属于某个桶的编号,那么就在那个桶里放一个球。
举个例子:
现在给定n个数,要将它们从小到大输出,那么用上述排序的方法,很快就能搞定。代码如下:

#include<stdio.h>
#include<string.h> 
int main()
{
	int book[10],n,t,i,j;
	memset(book,0,sizeof(book));        //调用memset函数需要有头文件<string.h>;
	scanf("%d",&n);      //输入一个数,接下来有n个数; 
	for(i=0;i<n;i++)
	{
		scanf("%d",&t);   //将输入的每个数读到变量t中 
		book[t]++;        //编号为t的桶放一个球; 
	 } 
	for(i=0;i<10;i++)     //判断每个桶的情况; 
	{
		for(j=1;j<=book[i];j++)
		{
			printf("%d ",i);    //有几个球就输出几次; 
		 } 
	}
	return 0;
}

测试结果如下:

5            
2 8 5 3 3         
2 3 3 5 8

但是这种算法有局限性,举个例子,如果是对几个人的成绩排序,按成绩输出他们的名字,这种就无法完成。也就是说找不到拥有这个数的家伙是谁。

上一篇: 简化版桶排序

下一篇: PHP基础补充