#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; }