vlambda博客
学习文章列表

基数排序:C++实现

基数排序:LSD

代码块

 1#include<iostream>
2#include<list>
3using namespace std;
4int maxdigit(int data[],int n)
5
{
6   int d = 1;
7   int p = 10;
8   for(int i=0;i<n;++i)
9   {
10       while(data[i]>p)
11       {
12           p *= 10;
13           ++d;
14       }
15       return d;
16   }
17}
18void radixsort(int data[], int n)
19
{
20    int digits = maxdigit(data,n);
21    list<int> lists[10];
22    int d,j,k,factor;
23    for(d=1,factor=1;d<=digits;factor*=10,d++)
24    {
25        for(j=0;j<n;j++)
26        {
27            lists[(data[j]/factor)%10].push_back(data[j]);//把数放进链表里
28        }
29        for(j=k=0;j<n;j++)
30        {
31            while(!lists[j].empty())
32            {
33                data[k++]=lists[j].front();//把链表内的数据放回数组中
34                lists[j].pop_front();//删除链表
35            }
36        }
37        for(int m=0;m<n;m++)//测试用,看每一次排序后的中间结果
38        {
39            cout << data[m] << " ";
40        }
41        cout << endl;
42    }
43}
44int main()
45
{
46    int data[10]={179,208,306,93,859,984,55,9,271,33};
47    radixsort(data,10);
48    cout<<"排序后的数据:"<<endl;
49    for(int i=0;i<10;i++)
50    {
51        cout << data[i] << endl;
52    }
53    cout << "测试基数排序"<<endl;
54    return 0;
55}