当前位置:首页 > JavaScript

js实现基数算法

2026-04-04 14:30:14JavaScript

基数排序(Radix Sort)实现

基数排序是一种非比较型整数排序算法,通过逐位分配和收集实现排序。以下是JavaScript的实现方法及说明:

算法原理

基数排序基于键值的每位数字进行排序,从最低位(LSD)或最高位(MSD)开始。通常使用桶分配和收集的步骤重复进行,直到所有位数处理完毕。

js实现基数算法

JavaScript实现代码

function radixSort(arr) {
    const maxNum = Math.max(...arr) * 10;
    let divisor = 10;

    while (divisor < maxNum) {
        let buckets = Array.from({ length: 10 }, () => []);

        for (let num of arr) {
            buckets[Math.floor((num % divisor) / (divisor / 10))].push(num);
        }

        arr = [].concat(...buckets);
        divisor *= 10;
    }

    return arr;
}

代码解析

  1. 初始化参数

    js实现基数算法

    • maxNum确定循环次数,为数组中最大数的10倍(避免遗漏位数)。
    • divisor初始为10,用于提取当前位的数字。
  2. 分配桶

    • 创建10个空桶(对应数字0-9)。
    • 计算当前位的值:(num % divisor) / (divisor / 10),将数字放入对应桶。
  3. 收集桶

    • 按桶顺序合并所有数字,形成新的数组。
    • divisor乘以10,处理下一位。

示例调用

const array = [170, 45, 75, 90, 802, 24, 2, 66];
console.log(radixSort(array)); // 输出 [2, 24, 45, 66, 75, 90, 170, 802]

时间复杂度

  • 最佳/平均/最差:O(nk),其中n是元素数量,k是最大数字的位数。
  • 空间复杂度为O(n + k),需要额外的桶空间。

注意事项

  • 仅适用于整数排序,负数需特殊处理(如偏移量转换)。
  • 对于位数差异大的数组,可能需补零或调整逻辑。

标签: 基数算法
分享给朋友:

相关文章

js实现基数算法

js实现基数算法

基数排序(Radix Sort)简介 基数排序是一种非比较型整数排序算法,通过逐位分配和收集实现排序。适用于整数或固定格式字符串,时间复杂度为O(nk),其中n是元素数量,k是数字位数。 实…

js实现贪心算法

js实现贪心算法

贪心算法简介 贪心算法是一种在每一步选择中都采取当前状态下最优(即最有利)的选择,从而希望导致结果是全局最优的算法。贪心算法常用于解决优化问题,如最短路径、最小生成树等。 贪心算法的基本步骤 贪心算…

算法js实现

算法js实现

JavaScript 算法实现基础 JavaScript 作为一门灵活且强大的编程语言,能够实现各种常见算法。以下是一些基础算法的 JavaScript 实现示例。 排序算法 快速排序是一种高效的排…

js 签名算法实现

js 签名算法实现

签名算法概述 签名算法通常用于确保数据的完整性和真实性,常见于API请求、数据传输等场景。JavaScript中可以通过多种方式实现签名算法,如HMAC、RSA等。 HMAC签名实现 HMA…

php 实现排序算法

php 实现排序算法

冒泡排序 冒泡排序通过多次遍历数组,每次比较相邻元素并交换位置,将较大元素逐步移至数组末尾。 function bubbleSort($array) { $n = count($arra…

php实现算法

php实现算法

PHP 实现常见算法的方法 PHP 作为一种服务器端脚本语言,可以实现多种算法。以下是几种常见算法的 PHP 实现示例。 冒泡排序算法 冒泡排序是一种简单的排序算法,通过重复遍历列表,比较相邻元素并…