冒泡排序(JS版)
冒泡排序的排序过程是简单直观的,主要的执行步骤:
1. 比较未排序序列中的相邻元素,如果两者的顺序不正确,则对两个元素进行交换;
2. 重复地对剩余未排序的元素执行上一步,直至完成排序;
具体代码实现细节:
1. 外层循环控制执行的轮数(如果有n个元素,一般会执行n-1轮);
2. 内层循环对未排序序列执行相邻元素的比较操作(后半部序列逐渐变得有序);
3. 可以做一些细节优化,提升一些执行性能。
执行过程的动态演示:
示例代码:
/** * 冒泡排序(小优化方式1) */ var bubbleSort = function (nums) { const n = nums.length; // 控制执行轮数 for (let i = 0; i < n - 1; i++) { // 当次的所有元素是否已经有序(未发生位置交换) let hasOrdered = true; // 比较相邻元素并交换 for (let j = 0; j < n - 1 - i; j++) { if (nums[j] > nums[j + 1]) { swap(nums, j, j + 1); hasOrdered = false; } } if (hasOrdered) break; } }; /** * 冒泡排序(小优化方式2) */ var bubbleSort = function(nums) { // 数据容量 const n = nums.length; // 当前轮次的排序过程中,发生过元素的交换 let hasSwapped = true; // 控制执行轮数 for (let i = 0; i < n - 1; i++) { // 如果上一轮未发生位置的交换,则直接退出(已完成排序) if (!hasSwapped) break; // 初始化当前轮交换状态的值 hasSwapped = false; // 比较相邻元素并交换 for (let j = 0; j < n - 1 - i; j++) { if (nums[j] > nums[j + 1]) { swap(nums, j, j + 1); hasSwapped = true; } } } }; /** * 交换两个位置上的元素 */ var swap = function(nums, i, j) { const num = nums[i]; nums[i] = nums[j]; nums[j] = num; };
(2021年9月左右的记录)冒泡排序的示例:
var bubbleSort = function(nums) { var n = nums.length; for (var i = 0; i < n - 1; i++) { for (var j = 0; j < n - 1 - i; j++) { if (nums[j] > nums[j + 1]) { swap(nums, j, j + 1); } } } }; // 1. 利用中间变量 var swap = function(nums, i, j) { var t = nums[i]; nums[i] = nums[j]; nums[j] = t; }; // 2. 利用加法(可能越界) var swap = function(nums, i, j) { nums[j] = nums[i] + nums[j]; nums[i] = nums[j] - nums[i]; nums[j] = nums[j] - nums[i]; };
End
分类:
JavaScript
, 排序算法
标签:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?