/*测试数据要求:不能是负数,同一数位上相同的数有一定限制*/ #include<iostream> #include<cmath> #include<ctime> #include<cstdio> using namespace std; const int bitmaxsize = 50;//在同一位上相同的数的个数,一般情况下有数据个数的一半基本能满足要求 const int Maxarrsize = 100;//数组数据个数 void radixsort(int * arr, int num1, int num2, int n);
int getnumbit(int * arr, int length); void print(int * arr, int length); int main() { srand(time(0)); int m[Maxarrsize] = { 0 }; for (int i = 0; i < Maxarrsize; ++i) m[i] = rand(); //m[68] = 26905;为什么此处加入六位数的时候会出现程序崩溃 const int arrsize = sizeof(m) / sizeof(int); print(m, arrsize); //cout << INT_MAX << "*****************\n"; //cout << pow(2, 31) << "*****************\n"; radixsort(m, 0, arrsize-1, getnumbit(m, arrsize)); print(m, arrsize); return 0; } int getnumbit(int * arr, int length) { if (length <= 0)return 0; else { int i = 10; for (;i>0; --i) { for (int j = 0; j < length&&j >= 0; ++j) { int t = pow(10, i); if (arr[j] / t != 0)return i + 1; }
} return 0; } } void print(int * arr, int length) { for (int i = 0; i < length; ++i) cout << arr[i] << "\t"; cout << endl; } void radixsort(int * arr, int num1, int num2, int n) { struct heap { int m[bitmaxsize]; int count = 0; }; heap *g=new heap[10]; for (int i = 1; i <= n; ++i) { int f = pow(10, i-1); for (int j = 0;j < num2 - num1+ 1; ++j) { int t = (arr[j] / f) % 10; g[t].m[g[t].count++] = arr[j]; } int h = num2; for (int j = 9; j >-1 ; --j) { for (; g[j].count > 0&&h>-1;h--) { arr[h] = g[j].m[--g[j].count]; }
} } cout << endl; //for (int i = 0; i < 10; ++i) //delete []g[i].m; delete[]g; }