个人主页:爱吃炫迈
系列专栏:数据结构与算法
座右铭:快给我点赞赞
- 基数排序(Radix Sort)是桶排序的扩展,又称“桶子法”。
- 它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。
动图演示
步骤
基数排序的算法的步骤是:
- 将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。
- 然后,从最低位开始,依次进行一次排序。
- 这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。
案例演示
用基数排序算法实现743, 22, 93, 3, 554, 14, 28, 65, 39, 865的升序排序
第一步:统一位数
第二步:按照个位数进行排序
第三步:按照十位数进行排序
第四步:按照百位数进行排序
排序完成啦~~撒花~
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);
时间复杂度
O (nlog®m),其中r为所采取的基数,而m为堆数
空间复杂度
O(k + N)
稳定性
稳定
希望我的文章能对你学习选择排序有所帮助!