冒泡排序细解

233 阅读2分钟

# 冒泡排序原理

冒泡有升序和降序排列,现在以升序排列为例,冒泡的过程就是从第一个元素开始依次跟后面元素进行比对,如果第一个大于第二个元素,则交换数值,大的数字排后面,如果第一个比第二个小,则不交换;再将大的数字继续跟后面元素比对,重复前面操作,一轮比对过后,该数组最大元素会被挪到最后,继续第二轮比对,一共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);