参考的猎豹网校
技术排序效率高,和快速排序相当,但是比快速排序要多一倍的存储空间(缺点明显)。
既可以从高位开始排序,也可以从地位开始排序。
代码附上
#include<iostream>
#include<list>
using namespace std;
int maxdigiit(int data[],int n)
{
//int len3 = sizeof(data) / sizeof(*data);
//cout << "len3:" << len << endl;
int d = 1;
int p = 10;
for (int i = 0; i < n; ++i)
{
while (data[i] >= p)
{
p *= 10;
++d;
}
}
return d;
}
void radixsort(int *data,int n)
{
//int len2 = sizeof(data) / sizeof(*data);
//cout << "len2:" << len << endl;
int digits = maxdigiit(data,n);
list<int> lists[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();
}
}
}
}
int main()
{
int data[10] = {173,176,172,170,171,984,55,9,271,33};
int len = sizeof(data) / sizeof(data[0]);
radixsort(data,len);
cout << "len1:" << len<<endl;
for (int i = 0; i < len; i++)
cout << data[i] << " ";
cout << endl;
return 0;
}