编辑代码

const findMax = (arr, len) => {
    let max = arr[0];
    for (let i = 1; i < len; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    return max;
}

//输入50,返回2
//输入100,返回3 
const calBitCount = (max) =>  {
	return max.toString().length;
}
// 输入(50,0),返回0
// 输入(50,1),返回5 
const getBitValue = (value, bit) => {
	return Math.floor(value / Math.pow(10, bit)) % 10;
}


const radixSort = (arr, len) => {
	//1. 找出最大值,计算出需要排序的位 
	let max = findMax(arr, len);
	let bitCount = calBitCount(max);
	
	
	//2. 创建排序数组
    let radixCount = 10;
    let count = Array(radixCount).fill(0);
    let tempArray = Array(len);
	
	//3. 对每一位进行排序 
	for (let b = 0; b < bitCount; ++b) {
		//3.1 清空排序数组,把每个值赋予0 
		count.fill(0);
		//3.2 统计计数数组下标对应元素个数
		for (let i = 0; i < len; ++i) {
            let bitValue = getBitValue(arr[i], b);
            count[bitValue]++;
		} 
		
		//3.3 累计算出小于等于计数数组下标对应元素的个数 
		for (let c = 1; c < radixCount; ++c) {
            count[c] += count[c - 1];
		}
		
		//3.4 利用累加值和临时数组对对应的位进行排序
		for (let i = len - 1; i >=0; --i) {
            let bitValue = getBitValue(arr[i], b);
            tempArray[--count[bitValue]] = arr[i];
		} 
		
		// 3.5 临时数组数据拷贝回原数组 
        for (let i = 0; i < len; ++i) {
            arr[i] = tempArray[i];
        }
	} 
}

const printArray = (arr, len) => {
    for (let i = 0; i < len; ++i) {
        console.log(arr[i] + ' ');
    }
    console.log('\n');
}

let arr = [170, 45, 75, 90, 802, 24, 2, 66];
let len = arr.length;
	
	printArray(arr,len);
	radixSort(arr, len);
	printArray(arr,len);