桶排序思想:

假如数组bucketArr[9] = {0};初始化为0;如下:

    

0000000000

下标:0      1         2       3        4        5        6         7       8        9


假如要排序的数为:3 2 2 8 9 9,最大的数不能超过定义桶数组的最大下标。


则将出现的数放到桶中,相应下标的桶加1。则结果为:


0021000012


现在只要输出:下标为2则输出两个2,下标为3这输出1个三,依次类推,0不输出。


例子:代码实现如下:

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int i = 0;
	int j = 0;
	int temp = 0;
	/*假如是5个数排序,且数都小于10。举例说明桶排序*/
	int bucketArr[11] = {0};//11个桶
	printf("请输入要输入的5个数,小于等于10:");
	for(;i<5;i++)
	{
		scanf("%d",&temp);
		bucketArr[temp]++;
	}
	//从小到大,从大到小则i = 10即可
	for(i = 0;i < 11;i++)//桶数
	{
		for(j = 0;j < bucketArr[i];j++)
		{
			printf("%d",i);
		}
	}
	printf("\n");
	system("pause");
	return 0;
}

桶排序的时间复杂度为O(m+n)。桶数m+输入个数n。