当前位置:首页 > JavaScript

js实现基数算法

2026-01-30 22:42:40JavaScript

基数排序(Radix Sort)简介

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

实现基数排序的步骤

确定最大数字位数 找出数组中最大数字的位数,确定需要进行多少轮排序。例如,数组[3, 1, 44, 12]的最大数字是44,有2位。

function getMaxDigit(arr) {
  let max = Math.max(...arr);
  return String(max).length;
}

按位排序(从低位到高位) 使用计数排序对每一位进行稳定排序。创建10个桶(0-9),根据当前位的数字将元素分配到对应桶中,再按顺序收集回原数组。

function radixSort(arr) {
  const maxDigit = getMaxDigit(arr);
  let buckets = Array.from({ length: 10 }, () => []);

  for (let i = 0; i < maxDigit; i++) {
    // 分配
    for (let num of arr) {
      const digit = getDigit(num, i);
      buckets[digit].push(num);
    }
    // 收集
    arr = [].concat(...buckets);
    buckets = Array.from({ length: 10 }, () => []);
  }
  return arr;
}

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

处理负数的情况

若数组包含负数,可先分离正负数,分别排序后合并。负数需取绝对值并按高位到低位排序,最后反转结果。

js实现基数算法

function radixSortWithNegative(arr) {
  const positives = arr.filter(num => num >= 0);
  const negatives = arr.filter(num => num < 0).map(num => -num);

  const sortedPositives = radixSort(positives);
  const sortedNegatives = radixSort(negatives).reverse().map(num => -num);

  return [...sortedNegatives, ...sortedPositives];
}

示例测试

console.log(radixSort([3, 1, 44, 12])); // [1, 3, 12, 44]
console.log(radixSortWithNegative([-3, 1, -44, 12])); // [-44, -3, 1, 12]

注意事项

  • 基数排序对数据格式要求严格,需确保所有元素位数相同或能补齐。
  • 对于浮点数,需转换为整数处理(如乘以10的幂次),排序后再转换回去。

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

相关文章

js实现贪心算法

js实现贪心算法

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

用js来实现所有算法

用js来实现所有算法

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

js实现算法

js实现算法

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

js实现火焰算法

js实现火焰算法

火焰算法实现基础 火焰算法(Fire Effect)是一种模拟火焰燃烧效果的图形算法,常用于生成动态火焰视觉效果。在JavaScript中,可以通过Canvas或WebGL实现。 使用Canvas实…

排序算法 php实现

排序算法 php实现

以下是在PHP中实现常见排序算法的几种方法,每种算法均附上代码示例和简要说明: 冒泡排序 通过重复比较相邻元素并交换位置完成排序,时间复杂度为O(n²)。 function bubbleSort(…