数据结构与算法(C语言版)__基数排序

来源:互联网 发布:淘宝宝贝详情页怎么做 编辑:程序博客网 时间:2024/06/07 03:07

基数:
十进制的基数是10,二进制的基数是2,。。。
这里写图片描述

先排最低位LSD
也可以先排最高位MSD

这里写图片描述

这里写图片描述

这里写图片描述

下面看代码:

#include<iostream>#include<list>using namespace std;//返回最大数的位数int maxdigit(int data[], int n){    int d = 1;    int p = 10;    for (int i = 1; i < n; ++i){        while (data[i] >= p){            p *= 10;            ++d;        }    }    return d;}//排序void radixsort(int data[], int n){    int digits = maxdigit(data, 10);    list<int> lists[10];//定义10个链表    int d, j, k, factor;    for (d = 1, factor = 1; d <= digits; factor *= 10, d++){        for (j = 0; j < n; j++){            lists[(data[j] / factor)%10].push_back(data[j]);        }        for (j = k = 0; j < 10; j++){            while (!lists[j].empty()){                data[k++] = lists[j].front();                lists[j].pop_front();            }        }        for (int m = 0; m < n; m++)            cout << data[m] << " ";        cout << endl;    }}int main(){    int data[10] = { 179, 208, 306, 93, 859, 984, 55, 9, 271, 33 };    radixsort(data, 10);    cout << "排序后:"<<endl;    for (int i = 0; i < 10; i++)        cout << data[i] << " ";    cout << endl;    system("pause");    return 0;}

总结:基数排序的方法是速度比较快的,但是会浪费一倍的内存,如果数据是1M,那就要使用2M的空间。

0 0