当前位置:首页 > JavaScript

js实现复杂度n的排序

2026-03-02 02:57:29JavaScript

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

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

计数排序(Counting Sort)

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

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实现复杂度n的排序

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

相关文章

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现选题

js实现选题

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

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const rando…