#include <iostream>
#include <list>
using namespace std;
int maxdigit(int data[], int n)
{
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 digits = maxdigit(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();//这个是将自己建的list的头一个数值传输到原来的数据中,这里的【k++】【j++】都是指的下标,
lists[j].pop_front(); // 这里是指将自己建的list的数据删除掉,
}
}
//for(int m = 0; m < n; m++) // 这个for循环是将中间排序的结果输出的,
// cout<< data[m] << " ";
//cout << endl;
}
}
int main()
{
int data[] = { 179,208,306,93,859,984,55,9,271,33 };
radixsort(data,10);
for(int i = 0; i < 10; i++)
cout << data[i] << " ";
cout << endl;
return 0;
}
基数排序
最新推荐文章于 2022-04-26 21:39:49 发布