给你一组数据,假设是 1 2 3 4 4 我们要给它们由大到小排序,你第一时间会想到什么方法?
所谓桶排序,就是说,假设你输入的数据的大小范围只有从0~5,那我们就假设有6个桶,桶的编号依次为0~6。如果数字是0就放在0的桶里,1就放在1的桶里,统计上面的数据的个数,1,2,3桶都有一个,4号桶有两个,5号为空,然后我们只要从5号桶开始打印,里面啥都没有的不打印。有两个的打印两个,有一个的打印一个,打印其对应编号即可
c++代码如下
#include <iostream>
using namespace std;
int main()
{
int book[1001],i,j,n,k;
cout<<"请输入你要排序的数的个数,不许超1000!"<<endl;
cin>>n;
for(i=0;i<=1000;i++) //创造1000个桶,默认里面都装0个
{
book[i]=0;
}
cout<<"输入你要排序的一串数字"<<endl;
for(i=0;i<n;i++) //向对应数字的桶里放数字
{
cin>>k;
book[k]++;
}
cout<<"排序后的结果为:"<<endl;
for(i=1000;i>=0;i--)
{
for(j=1;j<=book[i];j++)
{
cout<<i<<" "; //检验每个箱子里的个数,0的直接舍弃掉
}
}
return 0;
}
这是范围为1000的排序,注意第22行for循环,其目的为筛掉个数为0的桶,数字为几就打印几次
(假设为2,循环两次,自然就打印两个数咯)
运算结果:
需要注意的是,虽然此方法排序很快,但是非常浪费空间,就如上面我排5个数字,却用了1001个桶。
感谢观看!!!