基数排序: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}