算法初步——桶排序

桶排序实际上是将对应数字出现的次数存储在一个一维数组的对应位置,将所有数字放在对应的桶里之后,再从桶里按其对应出现的次数将数据拿出。

ps:这里介绍的桶排序算法并不是真正意义上的桶排序,真正的桶排序比这要复杂的多,我们以后介绍。

#include<iostream>
using namespace std;

int a[11], t;
int main()
{
    for (int i = 0; i < 11; i++)
        a[i] = 0;                    //将桶里的数字初始化为0,表示此时该数字出现0次
    for (int i = 0; i < 5; i++)        //循环读入5个数字
    {
        cin >> t;                    //先将数字赋值给变量t
        a[t]++;                        //进行计数
    }

    //接下来是从桶中拿出数据的过程
    for (int i = 0; i < 11; i++)
    {
        for (int j = 0; j <= a[i]; j++)
            cout << i << ' ';
    }
    cout << endl;
    return 0;
}

 以上是按从小到大的顺序进行排序的,如要从大到小进行排序,只需要将for(int i=0;i<11;i++)改为for(int i=10;i>=0;i--)

这个算法就好比有11个桶,标号0~10。每出现一个数,就在其对应的桶里插入一个旗子,最后只要数一数每个桶中的旗子数即可。例如2号桶中有1个旗子,表示2出现了一次,以此类推。