当前位置:首页 > 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码分配桶。

性能优化建议

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

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

相关文章

vue实现sku算法

vue实现sku算法

Vue 实现 SKU 算法 SKU(Stock Keeping Unit)算法通常用于电商平台,用于处理商品的多规格组合(如颜色、尺寸等)及其库存管理。以下是基于 Vue 的实现方法: 数据结构设…

php实现算法

php实现算法

PHP 实现常见算法的方法 PHP 可以实现多种算法,包括排序、搜索、递归、动态规划等。以下是几种常见算法的 PHP 实现方式。 冒泡排序(Bubble Sort) 冒泡排序通过多次遍历数组,每…

php实现欧几里得算法实现

php实现欧几里得算法实现

欧几里得算法简介 欧几里得算法(辗转相除法)用于计算两个非负整数的最大公约数(GCD)。其核心思想是通过反复用较小数除较大数取余,直到余数为0,此时的除数即为最大公约数。 PHP实现方法 以下是用P…

js实现贪心算法

js实现贪心算法

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

用js来实现所有算法

用js来实现所有算法

在 JavaScript 中实现所有算法是一个庞大的任务,因为算法种类繁多,涵盖数据结构、排序、搜索、图论、动态规划等多个领域。以下是部分常见算法的 JavaScript 实现示例,供参考: 排序算…

js实现算法

js实现算法

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