信息发布→ 登录 注册 退出

如何用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实现一个简单的排序算法_冒泡和快速排序如何编写?的详细内容,更多请关注其它相关文章!


相关文章: 荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程  包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址  自动化J*a应用中GitHub CLI或REST API的认证与交互  构建轻量级网站内部消息系统:Formspree 集成指南  html怎么运行外部js文件中的函数_运html外js文件函数法【技巧】  响应式CSS Grid布局:优化网格项在小屏幕下的堆叠与宽度适配  Pandas DataFrame:高效添加条件计算列  天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】  2026年发布! 美少女养成动作RPG《神剑少女战记》发布实机演示  Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】  Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录  C#中解析不规范的HTML为XML 常见的坑与解决办法  Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏  如何在CSS中使用浮动制作导航栏_float实现水平菜单  J*aScript DOM操作:高效清空列表元素的策略与实践  虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画  Composer的 COMPOSER_PROCESS_TIMEOUT 配置项有什么用_解决因执行时间过长而失败的Composer脚本  LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置  反效果?《战地6》免费试玩开启后玩家数不升反降  优化Django表单:提交验证失败后保留用户输入  《马克思佩恩3》早期版本曝光 UI设计曾多次调整!  Angular中父组件异步更新子组件复选框状态的实践指南  composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?  12306选座如何查看座位示意图_12306座位示意图解读与使用  PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误  使用Pandas转换并合并DataFrame:多列映射至统一结构  uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验  MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具  深入理解J*a链表中的IPosition接口与使用  怎么去除衣服上的口红印_生活小妙招教你用酒精轻松擦除  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  HTML元素状态管理:根据DIV内容动态启用/禁用按钮  FullCalendar 自定义按钮样式定制指南  Python复杂任务中断策略:通过回调函数实现优雅停止  Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐  怎样更改Windows系统的默认安装路径_避免C盘爆满的终极设置【技巧】  如何仅使用CSS更改登录界面背景图像图标的颜色  印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】  品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程  Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】  汽水音乐在线解析 汽水音乐在线解析入口  火狐浏览器占用内存高卡顿怎么办 火狐浏览器性能优化设置技巧  J*aScript生成器_j*ascript异步迭代  KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程  深入理解J*aScript中的B样条曲线与节点向量生成  Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置  处理Kafka消费者会话超时:深入理解消息处理语义与幂等性  2026春节假期时间安排 2026春节假日查询  php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】  漫蛙Manwa2官网入口地址分享 漫蛙漫画PC版永久访问通道 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!