编辑代码

#include <iostream>
#include <cmath>

using namespace std;

int findMax(int arr[], int len) {
	
    int max = arr[0];
    for (int i = 1; i < len; ++i) {
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    return max;
}
//输入50,返回2
//输入100,返回3 
int calBitCount(int max) {
    if (max == 0) return 1;
    return static_cast<int>(log10(max)) + 1;
}
// 输入(50,0),返回0
// 输入(50,1),返回5 
int getBitValue(int value, int bit) {
    int bitValue = (value / static_cast<int>(pow(10, bit))) % 10;
    return bitValue;
}

void radixSort(int arr[], int len) {
  //1. 找出最大值,计算出需要排序的位 
	int max = findMax(arr, len);
	int bitCount = calBitCount(max);


//2. 创建排序数组
	int radixCount = 10;	
	int* count = new int[radixCount]();
	int *tempArray = new int[len]();

//3. 对每一位进行排序 
    for (int b = 0; b < bitCount; b++) {
        for (int i = 0; i < radixCount; i++)
            count[i] = 0;

        for (int i = 0; i < len; i++)
            count[getBitValue(arr[i], b)]++;

        for (int i = 1; i < radixCount; i++)
            count[i] += count[i - 1];

        for (int i = len - 1; i >= 0; i--) {
            int value = arr[i];
            int valueBit = getBitValue(value, b);
            tempArray[count[valueBit] - 1] = value;
            count[valueBit]--;
        }
// 3.5 临时数组数据拷贝回原数组 
        for (int i = 0; i < len; i++) {
            arr[i] = tempArray[i];
        }
    }

    delete[] count;
    delete[] tempArray;
}

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

int main() {
    int arr[] = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
    int len = sizeof(arr) / sizeof(arr[0]);
    
    cout << "排序前:" << endl;
    printArray(arr, len);
    
    radixSort(arr, len);
    
    cout << "排序后:" << endl;
    printArray(arr, len);

    return 0;
}