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

冒泡排序和快速排序是两种经典排序算法,JavaScript 实现起来都不难,关键在于理解逻辑和边界处理。
冒泡排序:相邻比较,大数上浮
每次遍历把当前未排序部分的最大值“冒泡”到末尾,重复直到全部有序。
外层循环控制排序轮数(最多 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 a[j + 1]) { [a[j], a[j + 1]] = [a[j + 1], a[j]]; // 解构交换 swapped = true; } } if (!swapped) break; // 提前结束 } return a;}
快速排序:分治递归,基准划分
选一个基准(pivot),把数组分为“小于基准”“大于等于基准”两部分,再递归排序这两部分。
基准可选首元素、末元素或中间元素;简单起见常取中间或末尾分区(partition)是核心:用双指针把小元素放左、大元素放右递归终止条件:子数组长度 ≤ 1
function quickSort(arr) { if (arr.length <= 1) return arr; const pivot = arr[Math.floor(arr.length / 2)]; const left = [], right = [], equal = [];for (const x of arr) {if (x pivot) right.push(x);else equal.push(x);}
return [...quickSort(left), ...equal, ...quickSort(right)];}
这是“简洁版”,易懂但额外用了空间。进阶可写原地分区(Lomuto 或 Hoare 分区方案),节省内存。
立即学习“Java免费学习笔记(深入)”;
对比与使用建议
冒泡排序时间复杂度 O(n²),仅适合教学或极小数组(如 快速排序平均 O(n log n),实际性能好,但最坏(已排序时)退化为 O(n²);可用随机选基准缓解生产环境优先用 Array.prototype.sort()(V8 引擎底层混合了快排、插入和堆排)自己实现时注意:避免直接修改原数组,测试边界 case(空数组、单元素、重复值、已排序)
基本上就这些。写出来不复杂,但细节(比如循环边界、递归出口、是否稳定)容易忽略。
以上就是如何用JavaScript实现一个简单的排序算法_冒泡和快速排序如何编写?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1542358.html
微信扫一扫
支付宝扫一扫