排序算法系列之基数排序

基数排序

思想:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。

最高位优先(Most Significant Digit first)法,简称MSD法:先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码继续这样的排序分组,直到按最次位关键码kd对各子组排序后。再将各组连接起来,便得到一个有序序列。

最低位优先(Least Significant Digit first)法,简称LSD法:先从kd开始排序,再对kd-1进行排序,依次重复,直到对k1排序后便得到一个有序序列。


程序:

#define MAXBIT 3 //假定最高位为百位
template<classT>
void RadixSort(T *x,constintN)
{
    vector<T>Bucket[10];
    for(intb = 1; b <= MAXBIT; b++)
    {
        intbasicbit = pow(10 , b);
        for(inti = 0; i < N; i++)
        {
            intindex = (x[i] % basicbit) / (basicbit/10) ;
            Bucket[index].push_back(x[i]);
        }
 
        inti = 0;
        for(intj =0 ; j <= 9 ; j++)
        {
            for(intm = 0;  m < Bucket[j].size(); m++)
            {
                x[i++]= Bucket[j][m];
            }
        }
    }
}
 

分析:

稳定性:稳定

时间复杂度:O(kn)->O(n)

空间复杂度:O(kn)->O(n)

你可能感兴趣的:(排序算法,基数排序)