当前位置:首页 > JavaScript

js实现排序

2026-04-03 22:36:51JavaScript

排序算法实现

JavaScript中实现排序可以通过多种方式,包括内置方法、自定义比较函数或手动实现经典算法。

使用Array.prototype.sort()

默认情况下,sort()方法将元素转换为字符串并按Unicode码点排序:

const arr = [3, 1, 4, 2];
arr.sort(); // 结果为[1, 2, 3, 4]

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

js实现排序

const nums = [40, 100, 1, 5];
nums.sort((a, b) => a - b); // 升序排列
nums.sort((a, b) => b - a); // 降序排列

对象数组排序

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

const items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 }
];
items.sort((a, b) => a.value - b.value);

手动实现快速排序

递归实现快速排序算法:

js实现排序

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++) {
    arr[i] < pivot ? left.push(arr[i]) : right.push(arr[i]);
  }
  return [...quickSort(left), pivot, ...quickSort(right)];
}

手动实现冒泡排序

通过相邻元素比较交换实现:

function bubbleSort(arr) {
  let len = arr.length;
  for (let i = 0; i < len; i++) {
    for (let j = 0; j < len - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
      }
    }
  }
  return arr;
}

稳定性处理

当需要保持相同元素的原始顺序时:

const data = [
  { id: 1, priority: 2 },
  { id: 2, priority: 2 } // 需保持原始顺序
];
data.sort((a, b) => {
  if (a.priority === b.priority) {
    return a.id - b.id; // 添加次级排序条件
  }
  return a.priority - b.priority;
});

性能注意事项

  • 原生sort()方法在不同浏览器中的实现不同(V8使用Timsort)
  • 大数据量时建议使用Web Worker避免阻塞主线程
  • 对于固定模式数据可考虑使用计数排序等非比较算法

标签: js
分享给朋友:

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…