新闻中心

如何用J*aScript实现一个简单的排序算法_冒泡和快速排序如何编写?

2025-12-14
浏览次数:
返回列表
冒泡排序通过相邻元素比较交换使最大值逐轮上浮,最多n-1轮,可提前终止;快速排序采用分治法,选基准划分数组后递归排序左右子数组,核心为双指针分区。

如何用javascript实现一个简单的排序算法_冒泡和快速排序如何编写?

冒泡排序和快速排序是两种经典排序算法,J*aScript 实现起来都不难,关键在于理解逻辑和边界处理。

冒泡排序:相邻比较,大数上浮

每次遍历把当前未排序部分的最大值“冒泡”到末尾,重复直到全部有序。

  • 外层循环控制排序轮数(最多 n-1 轮)
  • 内层循环做相邻比较,每轮可减少一次比较(因为末尾已有序)
  • 可加优化:若某轮没发生交换,说明已有序,提前退出
function bubbleSort(arr) {
  const a = [...arr]; // 不修改原数组
  const n = a.length;
  for (let i = 0; i < n - 1; i++) {
    let swapped = false;
    for (let j = 0; j < n - 1 - i; j++) {
      if (a[j] > a[j + 1]) {
        [a[j], a[j + 1]] = [a[j + 1], a[j]]; // 解构交换
        swapped = true;
      }
    }
    if (!swapped) break; // 提前结束
  }
  return a;
}

快速排序:分治递归,基准划分

选一个基准(pivot),把数组分为“小于基准”“大于等于基准”两部分,再递归排序这两部分。

美图AI开放平台 美图AI开放平台

美图推出的AI人脸图像处理平台

美图AI开放平台 111 查看详情 美图AI开放平台
  • 基准可选首元素、末元素或中间元素;简单起见常取中间或末尾
  • 分区(partition)是核心:用双指针把小元素放左、大元素放右
  • 递归终止条件:子数组长度 ≤ 1
function quickSort(arr) {
  if (arr.length <= 1) return arr;
  const pivot = arr[Math.floor(arr.length / 2)];
  const left = [], right = [], equal = [];
<p>for (const x of arr) {
if (x < pivot) left.push(x);
else if (x > pivot) right.push(x);
else equal.push(x);
}</p><p>return [...quickSort(left), ...equal, ...quickSort(right)];
}

这是“简洁版”,易懂但额外用了空间。进阶可写原地分区(Lomuto 或 Hoare 分区方案),节省内存。

对比与使用建议

  • 冒泡排序时间复杂度 O(n²),仅适合教学或极小数组(如
  • 快速排序平均 O(n log n),实际性能好,但最坏(已排序时)退化为 O(n²);可用随机选基准缓解
  • 生产环境优先用 Array.prototype.sort()(V8 引擎底层混合了快排、插入和堆排)
  • 自己实现时注意:避免直接修改原数组,测试边界 case(空数组、单元素、重复值、已排序)

基本上就这些。写出来不复杂,但细节(比如循环边界、递归出口、是否稳定)容易忽略。

以上就是如何用J*aScript实现一个简单的排序算法_冒泡和快速排序如何编写?的详细内容,更多请关注其它相关文章!


# 如何使用  # 北京网站建设的流程  # 河源抖音seo推广方法  # 无锡品牌网站建设优点  # 岑巩县网站优化公司  # 拼多多关键词时间段排名  # 广元网站建设的企业  # 芜湖轻轨建设报价网站  # 谷歌seo文章发哪里  # 桂城芦苞网站建设  # 辽宁视频推广链接网站  # 如何实现  # 两部分  # javascript  # 可以选择  # 自定义  # 柯里  # 最多  # 如何用  # 美图  # 递归  # 冒泡排序  # 排序算法  # app  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏  b站怎么看视频的弹幕数量_b站弹幕数量查看方法  解决Python单元测试中Mock异常方法调用计数为零的问题  QQ邮箱官方邮箱登录入口 QQ邮箱网页版快速访问  抖音网页版怎么|直播|_抖音网页版开播操作指南  PySpark中从现有列右侧提取可变长度字符创建新列的教程  TypeScript/J*aScript:高效查找数组中首个唯一ID对象  html怎么运行外部js文件中的函数_运html外js文件函数法【技巧】  uc浏览器网页版入口 uc浏览器网页版最新网址  优化 Jest 模拟:强制未实现函数抛出错误以提升测试效率  12306选座怎么选到商务座_12306商务座选择与配置说明  J*a里如何使用forEach遍历Map_Map遍历方法说明  冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法  Angular Material 垂直步进器:实现底部到顶部排序的教程  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  Golang如何优化内存分配与垃圾回收_Golang内存管理与GC优化实践  Python多版本共存与虚拟环境管理深度指南  在哪找SublimeJ远程工具_SFTP插件配置教程  Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】  CSS Grid如何控制元素对齐_align-items与justify-items组合使用  网站内容防复制粘贴的实现策略与局限性  C++如何解决segmentation fault_C++段错误调试与原因分析  J*aScript中向JSON对象添加新属性的正确姿势  Promise错误处理:在catch后终止链式then执行的策略  如何有效阻止外部脚本意外修改内联样式的高度属性  微信聊天记录怎么加密_微信聊天记录加密方法  Composer的 "conflict" 字段有什么用_如何声明不兼容的包以避免依赖冲突  Python实时数据流中的动态最值查找策略  Angular中单选按钮的正确使用与常见陷阱解析  如何仅使用CSS更改登录界面背景图像图标的颜色  顺丰快递查单号物流信息 顺丰快递小程序查询入口  Linux如何构建多环境配置管理_Linux多环境配置方案  我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口  深入理解J*aScript Promise异步执行与微任务队列  QQ邮箱登录官网首页 腾讯QQ邮箱网页入口  如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit  荣耀Play7T运行卡顿解决_荣耀Play7T性能优化  反效果?《战地6》免费试玩开启后玩家数不升反降  一加手机电池耗电快怎么办_一加手机电池耗电快的解决方法  J*aScript教程:根据元素文本内容动态设置背景色  React项目中导航栏Logo自适应布局:避免裁剪与布局溢出  mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析  CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色  word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法  夸克AO3官网入口_AO3镜像网站2025推荐  BetterDiscord插件中安全更新用户简介的实践指南  QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录  Win11输入法不见了怎么办_Windows11恢复语言栏显示方法  在Socket.IO连接中实现Access Token自动更新与动态重连  小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍 

搜索