当前位置:首页 > 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来实现所有算法

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

用JS实现快速排序算法

用JS实现快速排序算法

快速排序的原理 快速排序是一种分治算法,通过选择一个基准元素(pivot)将数组分为两部分,一部分小于基准,另一部分大于基准,然后递归地对这两部分进行排序。 代码实现 function quic…

js 签名算法实现

js 签名算法实现

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

js回文算法实现

js回文算法实现

回文算法的实现方法 方法一:使用字符串反转 将字符串反转后与原字符串比较,若相同则为回文。 function isPalindrome(str) { const reversedStr = st…

php 实现排序算法

php 实现排序算法

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