基数排序之LSD(最低位优先)

算法说明

适用于数的值较小且集中的情况。
(1)初始化当前数位为最低位
(2)遍历一遍数组a,将当前数位值为i的数插入桶t[i]中
(3)从桶0到桶9依此遍历所有桶,将数值依此存入a数组中(覆盖原数组)
(4)如果当前数位是最高位,退出;否则,当前数位升高一位,转(2)

代码

#include 
using namespace std;
const int maxn=110;
int a[maxn];//原数组
vector<int> t[10];//10个桶

void LSD(int N)
{
    int maxv=-1e9;
    for(int i=0;iint radix=1;//取哪一位
    while(maxv)
    {
        maxv/=10;
        for(int i=0;i<10;i++) t[i].clear();
        for(int i=0;iint tmp=a[i]/radix;
            tmp%=10;
            t[tmp].push_back(a[i]);
        }
        int cnt=0;
        for(int i=0;i<10;i++)
        {
            for(int j=0;j10;
    }
}
int main()
{
    int N;
    while(cin>>N)
    {
        for(int i=0;icin>>a[i];
        LSD(N);
        for(int i=0;icout<" ";
        cout<return 0;
}

你可能感兴趣的:(基数排序之LSD(最低位优先))