# 冒泡排序原理
冒泡有升序和降序排列,现在以升序排列为例,冒泡的过程就是从第一个元素开始依次跟后面元素进行比对,如果第一个大于第二个元素,则交换数值,大的数字排后面,如果第一个比第二个小,则不交换;再将大的数字继续跟后面元素比对,重复前面操作,一轮比对过后,该数组最大元素会被挪到最后,继续第二轮比对,一共arr.length-1轮,每一轮要比对length-1-i次
//外层循环控制轮数
for(let i = 0; i < arr.length - 1; i++){
// 内层循环控制每次循环比对次数
for(let j = 0; j < arr.length - i - 1; j++ ){
// 如果前面数值大于后面元素,则交换位置
if(arr[j] > arr[j+1]){
let temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
cosole.log(arr)
有如下数组[3,19,8,22,1,2],3跟19比,19比3大,然后用19跟8比,19>8,交换数值,继续用19跟22比,19<22,用22跟1比,22>1,交换位置,用22跟2比,22>2,交换位置,一轮完成,22在最后,继续第二轮....数组长度为6,一共比对5轮,第一轮比对5次,第二轮4次...所以每轮是arr.length-1-i次.
let arr = [2, 3, 14, 8, 29, 1]
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
let temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
console.log(arr); // [1, 2, 3, 8, 14, 29]
extra: 也可以用sort()方法对数组进行排序,sort()默认升序,先调用每个数组项的toString()方法,然后按照字符串Unicode编码顺序对字符串进行排序,可能有时候得不到我们想要结果,推荐使用含参数的sort()方法进行升序降序排列
// sort()升序
let arr2 = [2, 3, 14, 8, 29, 1]
arr2.sort(function (a, b) {
return a - b
})
console.log(arr2);
// sort()降序
let arr3 = [2, 3, 14, 8, 29, 1]
arr3.sort(function (a, b) {
return b - a
})
console.log(arr3);