编辑代码

#include<iostream>
using namespace std;
int getRadixValue(int value, int radix, int radixCount)
{
	int radixValue = value;
	int i;
    for(i = 0; i < radixCount; ++i)
    {
        radixValue=radixValue/radix;
    }
    radixValue = radixValue % radix;
    return radixValue; 
}

bool radixSort(int array[],int arrLen,int radix)
{
	int max = array[0];
	int radixIndex;
	int j,k,l,m,n;
    if(arrLen <= 1)
		return true;
    for(int i = 1; i < arrLen; ++i)
        if (max < array[i]) max = array[i];
    
	int radixCount = 1;
    while ((max/=radix) > 0)
	{
        ++radixCount;
    }
    
    int *countingRadixBuckets = new int[radix]();
    int *tempArray = new int[arrLen]();
    for (radixIndex = 0; radixIndex < radixCount; ++radixIndex)
    {
        for(j = 0; j < arrLen; ++j)
        {
            ++countingRadixBuckets[getRadixValue(array[j], radix, radixIndex)];
        }
        for(k = 1; k < radix; ++k)
        {
            countingRadixBuckets[k] += countingRadixBuckets[k-1];
        }
        for(l = arrLen - 1; l >= 0; --l)
        {
            tempArray[--countingRadixBuckets[getRadixValue(array[l], radix, radixIndex)]] = array[l];
    	}
        for(m = 0; m < arrLen; ++m)
        {
            array[m] = tempArray[m];
        }

        for(n = 0; n < radix; ++n)
        {
            countingRadixBuckets[n] = 0;
        }
    }
    delete [] countingRadixBuckets;
    delete [] tempArray;
    return true;
}

void printArray(int array[], int arrLen)
{
    for (int i = 0; i < arrLen; ++i)
	{
        cout<<array[i] << " ";
    }
    cout<<endl<<endl;
}
int main()
{
	
	int a[]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
	int arrayLen = sizeof(a)/sizeof(int);
	cout<<"待排序数据为:"; 
	printArray(a,arrayLen);
	radixSort(a, arrayLen, 10);
	cout<<"排完序后的数据:";
	printArray(a, arrayLen);
}