327 字
2 分钟
算法之冒泡排序

[冒泡排序动画](Sorting (Bubble, Selection, Insertion, Merge, Quick, Counting, Radix) - VisuAlgo)

手写冒泡排序#

毋庸置疑,就是把每一项和下一项做对比,从小到大排序,那么最大的肯定放最后面,需要经过两轮循环

  1. 从区间0<= i <=arr.length-1的范围中去每一次生成 区间 [0, j]

  2. 每一次从区间[0, j]中找到这个区间最大的,因此根据“每一项和下一项做对比”来做比对

其中j的范围为0<=j<arr.length-1-i,算上上一层已经排序后的,就不需要比对

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

优化#

其实步骤1中,每次都去生成一个区间,如果这个区间[0,j]都是排过序的,那么说明,可以退出了

因此加一个flag用来表示不需要排序    

function bubbleSort(arr) {
for (let i = 0; i < arr.length; i++) {
let flag = true;
for (let j = 0; j < arr.length - i - 1; j++) {
const current = arr[j];
const next = arr[j + 1];
if (current > next) {
flag = false;
arr[j] = next;
arr[j + 1] = current;
}
}
if (flag) {
break;
}
}
return arr;
}
算法之冒泡排序
https://nollieleo.github.io/posts/算法之冒泡排序/
作者
翁先森
发布于
2023-02-25
许可协议
CC BY-NC-SA 4.0