当前位置:首页 > JavaScript

js实现基数算法

2026-03-01 13:46:05JavaScript

基数排序(Radix Sort)简介

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

基数排序实现步骤

定义辅助函数 获取数字的指定位数,例如个位、十位等:

js实现基数算法

function getDigit(num, place) {
  return Math.floor(Math.abs(num) / Math.pow(10, place)) % 10;
}

计算数字的位数:

js实现基数算法

function digitCount(num) {
  if (num === 0) return 1;
  return Math.floor(Math.log10(Math.abs(num))) + 1;
}

确定最大位数:

function mostDigits(nums) {
  let maxDigits = 0;
  for (let num of nums) {
    maxDigits = Math.max(maxDigits, digitCount(num));
  }
  return maxDigits;
}

主排序逻辑

function radixSort(nums) {
  const maxDigits = mostDigits(nums);
  for (let k = 0; k < maxDigits; k++) {
    const buckets = Array.from({ length: 10 }, () => []);
    for (let num of nums) {
      const digit = getDigit(num, k);
      buckets[digit].push(num);
    }
    nums = [].concat(...buckets);
  }
  return nums;
}

使用示例

console.log(radixSort([23, 345, 5467, 12, 2345, 9852]));
// 输出: [12, 23, 345, 2345, 5467, 9852]

关键点说明

  • 稳定性:基数排序是稳定排序,相同数字的相对位置不变。
  • 负数处理:当前实现未处理负数,可通过分离正负数并分别排序后合并。
  • 字符串支持:可修改为支持字符串排序,按字符ASCII码分配桶。

性能优化建议

  • 对于大型数据集,可考虑使用更高效的桶分配方式。
  • 如果数字范围已知且较小,可提前设置最大位数减少计算。

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

相关文章

php 实现算法

php 实现算法

PHP 实现常见算法的方法 PHP 作为一门服务器端脚本语言,可以实现多种算法。以下是一些常见算法的 PHP 实现示例。 排序算法 冒泡排序 function bubbleSort($array)…

js实现基数算法

js实现基数算法

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

蚁群算法js实现

蚁群算法js实现

蚁群算法简介 蚁群算法(Ant Colony Optimization, ACO)是一种模拟蚂蚁觅食行为的启发式算法,常用于解决组合优化问题(如旅行商问题TSP)。蚂蚁通过信息素(pheromone)…

js实现贪心算法

js实现贪心算法

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

js实现24点算法

js实现24点算法

24点算法简介 24点游戏的目标是通过加、减、乘、除四则运算,将4个数字组合成结果为24的表达式。以下是基于JavaScript的实现方法。 基本思路 排列组合:生成所有可能的数字排列顺序。 运算符…

js实现算法

js实现算法

JavaScript 实现常见算法的方法 排序算法 快速排序的实现: function quickSort(arr) { if (arr.length <= 1) return arr;…