当前位置:首页 > JavaScript

js实现复杂度n的排序

2026-04-05 03:48:32JavaScript

时间复杂度为 O(n) 的排序算法

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

计数排序(Counting Sort)

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

function countingSort(arr) {
    const max = Math.max(...arr);
    const min = Math.min(...arr);
    const count = Array(max - min + 1).fill(0);
    const output = Array(arr.length);

    for (let num of arr) {
        count[num - min]++;
    }

    for (let i = 1; i < count.length; i++) {
        count[i] += count[i - 1];
    }

    for (let i = arr.length - 1; i >= 0; i--) {
        const num = arr[i];
        output[count[num - min] - 1] = num;
        count[num - min]--;
    }

    return output;
}

桶排序(Bucket Sort)

桶排序适用于数据均匀分布的场景。将数据分到多个桶中,对每个桶单独排序后合并。

function bucketSort(arr, bucketSize = 5) {
    if (arr.length === 0) return arr;

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

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

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

    return sortedArr;
}

基数排序(Radix Sort)

基数排序适用于整数或字符串排序,按位进行比较。

js实现复杂度n的排序

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

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

注意事项

  • 计数排序和基数排序要求输入为整数。
  • 桶排序的性能依赖于数据分布的均匀性。
  • 实际应用中,需根据数据特点选择合适的算法。

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

相关文章

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…