327 字
2 分钟
算法之冒泡排序
[冒泡排序动画](Sorting (Bubble, Selection, Insertion, Merge, Quick, Counting, Radix) - VisuAlgo)
手写冒泡排序
毋庸置疑,就是把每一项和下一项做对比,从小到大排序,那么最大的肯定放最后面,需要经过两轮循环
-
从区间0<= i <=arr.length-1的范围中去每一次生成 区间 [0, j]
-
每一次从区间[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;}