编辑代码

#include <iostream>

using namespace std;

// 基数排序的核心思想就是将要排序的数据按照位切分,切分后按照从低位到高位的顺序,分别对每个位采用计数排序直至所有的位排完序为止
unsigned int getRadixValue(unsigned int value, unsigned int radix, unsigned int radixCount) {
    int radixValue = value;
    for (size_t i = 0; i < radixCount; ++i)
    {
        radixValue=radixValue/radix;
    }
    radixValue = radixValue % radix;
    return radixValue;   
}

// array 待排序的数组
// arrLen 待排序数组长度
// radix 基数,10进制,基数10
bool radixSort(unsigned int array[], unsigned int arrLen, unsigned int radix) {
    if (arrLen <= 1) {
        return true;
    }

    // 找出待排序数据最大的位数

    //Find maximum and minimal value
    int max = array[0];

    for (unsigned int i = 1; i < arrLen; ++i)
    {
         if (max < array[i]) {
            max = array[i];
        }
    }

    int radixCount = 1;
    while ((max/=radix) > 0) {
        ++radixCount;
    }

    // Create counting buckets
    int *countingRadixBuckets = new int[radix]();
    int *tempArray = new int[arrLen]();

    for (size_t radixIndex = 0; radixIndex < radixCount; ++radixIndex)
    {
        // Count number of values in array
        for (size_t j = 0; j < arrLen; ++j)
        {
            ++countingRadixBuckets[getRadixValue(array[j], radix, radixIndex)];
        }

        // Accumulate coutingBuckets to find the last ordered location of value in array
        for (size_t k = 1; k < radix; ++k)
        {
            countingRadixBuckets[k] += countingRadixBuckets[k-1];
        }

        //Traverse the array in reversed order
        for (int l = arrLen - 1; l >= 0; --l)
        {
            tempArray[--countingRadixBuckets[getRadixValue(array[l], radix, radixIndex)]] = array[l];
        }

        for (size_t m = 0; m < arrLen; ++m)
        {
            array[m] = tempArray[m];
        }

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

void printArray(unsigned int array[], int arrLen) {
    for (int i = 0; i < arrLen; ++i) {
        cout << array[i] << " ";
    }
    cout << endl;
}

int main(){
    unsigned int array0[] = {};
    unsigned int arrayLen = sizeof(array0)/sizeof(int);

    


    */ cout << "=========================================" << endl;

    unsigned int array6[] = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
    arrayLen = sizeof(array6)/sizeof(int);

    printArray(array6, arrayLen);
    radixSort(array6, arrayLen, 15);
    printArray(array6, arrayLen);


}