排序算法系列之基数排序

来源:互联网 发布:淘宝的集分宝有什么用 编辑:程序博客网 时间:2024/06/06 18:37

基数排序

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

最高位优先(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)

0 0
原创粉丝点击