#include <iostream>
using namespace std;
void print(int arr[],int n)
{
for(int i=0;i<n;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
int getradix(int value,int radix,int count)
{
int a=value;
for(int i=0;i<count;i++)
{
a=a/radix;
}
a=a%10;
return a;
}
bool paixu(int arr[],int radix,int n)
{
if(n<=1)
{
return true;
}
int max=arr[0];
for(int i=0;i<n;i++)
{
if(max<arr[i])
{
max=arr[i];
}
}
int radixcount=1;
while((max/=radix)>0)
{
radixcount++;
}
int *countingRadixBuckets = new int[radix]();
int *tempArray = new int[n]();
for(int radixIndex=0;radixIndex<radixcount;radixIndex++)
{
for (int j = 0; j < n; ++j)
{
++countingRadixBuckets[getradix(arr[j], radix, radixIndex)];
}
for (int k = 1; k < radix; ++k)
{
countingRadixBuckets[k] += countingRadixBuckets[k-1];
}
for (int l = n - 1; l >= 0; --l)
{
tempArray[--countingRadixBuckets[getradix(arr[l], radix, radixIndex)]] = arr[l];
}
for (int m = 0; m < n; ++m)
{
arr[m] = tempArray[m];
}
for (int x = 0; x < radix; ++x)
{
countingRadixBuckets[x] = 0;
}
cout<<"第"<<radixIndex+1<<"轮结果为:"<<endl;
print(arr,n);
}
delete [] countingRadixBuckets;
delete [] tempArray;
return true;
}
int main() {
int arr[]={56,23,85,234,64,235};
int arrayLen = sizeof(arr)/sizeof(int);
print(arr, arrayLen);
paixu(arr, 10,arrayLen);
return 0;
}