💫1. 基数排序
- 基数排序(Radix Sort)是桶排序的扩展,又称“桶子法”。
- 它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。
动图演示
💥2. 算法思路
步骤
基数排序的算法的步骤是:
- 将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。
- 然后,从最低位开始,依次进行一次排序。
- 这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。
案例演示
用基数排序算法实现743, 22, 93, 3, 554, 14, 28, 65, 39, 865的***升序排序***
💝***第一步***:统一位数💝
💝***第二步***:按照个位数进行排序💝
💝***第三步***:按照十位数进行排序💝
💝***第四步***:按照百位数进行排序💝
🎉🎉🎉🎉🎉🎉🎉排序完成啦~~撒花~🎉🎉🎉🎉🎉🎉🎉🎉
🎀3. 算法实现
function radixSort(array) {
let length = array.length;
// 如果不是数组或者数组长度小于等于1,直接返回,不需要排序
if (!Array.isArray(array) || length <= 1) return;
let bucket = [],
max = array[0],
loop;
// 取最大位数
loop = String(parseInt(Math.max(...array))).length;
// 初始化桶
for (let i = 0; i < 10; i++) {
bucket[i] = [];
}
for (let i = 0; i < loop; i++) {
for (let j = 0; j < length; j++) {
let str = array[j] + "";
if (str.length >= i + 1) {
let k = parseInt(str[str.length - 1 - i]); // 获取当前位的值,作为插入的索引
bucket[k].push(array[j]);
} else {
// 处理位数不够的情况,高位默认为 0
bucket[0].push(array[j]);
}
}
array.splice(0, length); // 清空旧的数组
// 使用桶重新初始化数组
for (let i = 0; i < 10; i++) {
let t = bucket[i].length;
for (let j = 0; j < t; j++) {
array.push(bucket[i][j]);
}
bucket[i] = [];
}
}
return array;
}
array = [743, 22, 93, 3, 554, 14, 28, 65, 39, 865];
let newarray = radixSort(array);
console.log(newarray);
🌄4. 算法性能分析
时间复杂度
O (nlog®m),其中r为所采取的基数,而m为堆数
空间复杂度
O(k + N)
稳定性
稳定
💞总结💞
希望我的文章能对你学习基数排序有所帮助!