当前位置:首页 > JavaScript

js实现复杂度n的排序

2026-03-02 02:57:29JavaScript

实现复杂度为 O(n) 的排序算法

在 JavaScript 中,实现时间复杂度为 O(n) 的排序算法通常需要满足特定条件,例如数据范围有限或具有特殊结构。以下是几种常见的 O(n) 排序方法:

js实现复杂度n的排序

计数排序(Counting Sort)

计数排序适用于整数且范围较小的数据集。核心思想是通过统计每个元素的出现次数,然后按顺序输出。

js实现复杂度n的排序

function countingSort(arr) {
  const max = Math.max(...arr);
  const count = new Array(max + 1).fill(0);
  const output = [];

  for (const num of arr) {
    count[num]++;
  }

  for (let i = 0; i < count.length; i++) {
    while (count[i] > 0) {
      output.push(i);
      count[i]--;
    }
  }

  return output;
}

桶排序(Bucket Sort)

桶排序将数据分到有限数量的桶中,每个桶单独排序(通常使用其他排序算法),最后合并结果。当数据分布均匀时,时间复杂度接近 O(n)。

function bucketSort(arr, bucketSize = 5) {
  const min = Math.min(...arr);
  const max = Math.max(...arr);
  const bucketCount = Math.floor((max - min) / bucketSize) + 1;
  const buckets = new Array(bucketCount).fill().map(() => []);

  for (const num of arr) {
    const bucketIndex = Math.floor((num - min) / bucketSize);
    buckets[bucketIndex].push(num);
  }

  const sorted = [];
  for (const bucket of buckets) {
    bucket.sort((a, b) => a - b);
    sorted.push(...bucket);
  }

  return sorted;
}

基数排序(Radix Sort)

基数排序按数字的每一位进行排序,从最低位到最高位。适用于整数或固定长度的字符串排序。

function radixSort(arr) {
  const maxDigits = Math.max(...arr).toString().length;
  for (let i = 0; i < maxDigits; i++) {
    const buckets = Array.from({ length: 10 }, () => []);
    for (const num of arr) {
      const digit = getDigit(num, i);
      buckets[digit].push(num);
    }
    arr = buckets.flat();
  }
  return arr;
}

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

注意事项

  1. 数据范围限制:计数排序和基数排序要求数据为整数,且范围不宜过大。
  2. 空间复杂度:这些算法通常需要额外空间(如计数数组或桶),空间复杂度可能较高。
  3. 稳定性:基数排序和计数排序是稳定排序,桶排序的稳定性取决于桶内排序算法。

以上方法在特定条件下可实现 O(n) 时间复杂度,但需根据实际数据特性选择合适的算法。

标签: 复杂度js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…