当前位置:首页 > JavaScript

js 实现排序

2026-03-02 07:08:08JavaScript

JavaScript 实现排序的方法

JavaScript 提供了多种排序方式,包括内置方法和自定义排序算法。以下是常见的实现方式:

使用 Array.prototype.sort()

JavaScript 数组自带 sort() 方法,默认按 Unicode 码点排序:

const arr = [3, 1, 4, 2];
arr.sort(); // 默认排序
console.log(arr); // [1, 2, 3, 4]

对于数字排序需要传入比较函数:

const numbers = [40, 100, 1, 5];
numbers.sort((a, b) => a - b); // 升序
console.log(numbers); // [1, 5, 40, 100]

实现快速排序算法

快速排序是高效的排序算法(平均时间复杂度 O(n log n)):

function quickSort(arr) {
  if (arr.length <= 1) return arr;

  const pivot = arr[0];
  const left = [];
  const right = [];

  for (let i = 1; i < arr.length; i++) {
    if (arr[i] < pivot) left.push(arr[i]);
    else right.push(arr[i]);
  }

  return [...quickSort(left), pivot, ...quickSort(right)];
}

console.log(quickSort([3,6,8,10,1,2,1])); // [1, 1, 2, 3, 6, 8, 10]

实现冒泡排序

冒泡排序是简单的排序算法(时间复杂度 O(n²)):

function bubbleSort(arr) {
  let swapped;
  do {
    swapped = false;
    for (let i = 0; i < arr.length - 1; i++) {
      if (arr[i] > arr[i + 1]) {
        [arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
        swapped = true;
      }
    }
  } while (swapped);
  return arr;
}

console.log(bubbleSort([5, 3, 8, 4, 2])); // [2, 3, 4, 5, 8]

对象数组排序

对对象数组按特定属性排序:

const users = [
  { name: 'John', age: 25 },
  { name: 'Jane', age: 22 },
  { name: 'Bob', age: 30 }
];

users.sort((a, b) => a.age - b.age);
console.log(users);
// 输出按年龄升序排列的对象数组

稳定排序实现

ES2019 开始 sort() 已经是稳定排序,如需自行实现:

js 实现排序

function stableSort(arr, compare) {
  return arr
    .map((item, index) => ({ item, index }))
    .sort((a, b) => compare(a.item, b.item) || a.index - b.index)
    .map(({ item }) => item);
}

这些方法涵盖了 JavaScript 中大多数排序需求,从简单到复杂场景均可适用。

标签: js
分享给朋友:

相关文章

js 实现链表

js 实现链表

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

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…

js 实现全屏

js 实现全屏

使用 requestFullscreen 方法 通过调用元素的 requestFullscreen 方法可以实现全屏。该方法兼容现代浏览器,但不同浏览器可能需要前缀。 const element =…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…

jquery和js

jquery和js

jQuery与JavaScript的区别 jQuery是一个基于JavaScript的库,封装了许多常用的功能,简化了DOM操作、事件处理、动画效果等。JavaScript是原生语言,功能更全面但代码…