js 冒泡排序

173 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情

前言

冒泡排序现在是基本需要掌握基础算法,它是十大基础算法中的最基础的算法。在面试中经常考察冒泡排序,主要考察能否快速写出无 bug 的代码。

题目:数组 [38, 5, 47, 15, 44, 26, 27] 进行从小到大进行排序。

解题思路

冒泡排序(升序),就是数组中的每个元素都与该元素后面所有的元素进行比较,如果该元素比后续元素大则互相交换,否则继续比较直到元素都比较完。一组数组,对数组内的元素相互之间进行比较,按照大小顺序依次输出。像水里面的气泡一样,越往水面上浮,气泡就越大。

解题步骤:

第一轮:11 6 38 19 10 66 17 56

  • 第一次:Ary[0] = 11 ,与后续元素value都进行比较,11 > 6 那么进行交换,当前Ary[0] =6 ,交换后结果:6 11 38 19 10 66 17 56
  • 第二次:Ary[0] =6,6<38,不交换,结果:6 11 38 19 10 66 17 56
  • 第三次:Ary[0] = 6, 6<19,不交换,结果:6 11 38 19 10 66 17 56
  • 第四次:Ary[0] = 6, 6<10 ,不交换,结果:6 11 38 19 10 66 17 56
  • ... ...

第一轮结束后结果:6 11 38 19 10 66 17 56

第二轮:6 11 38 19 10 66 17 56

  • 第一次:Ary[1] = 11 ,与后面元素value都进行比较,11< 38 ,不交换
  • 第二次:Ary[1] = 11,11< 19 ,不交换
  • 第三次:Ary[1] = 11, 11>10,交换,结果:6 10 38 19 11 66 17 56
  • 第四次:Ary[1] = 10, 10<66 ,不交换

JS 代码实现过程

(() => {
    let ary = [11, 6, 38, 19, 10, 66, 17, 56];
    //冒泡排序
    sortBuble(ary);
})()
​
// 冒泡排序 时间复杂度O(n^2)
function sortBuble(ary) {
    for (let i = 0; i < ary.length - 1; i++) {
        for (let j = i + 1; j < ary.length - i - 1; j++) {
            if (ary[i] >= ary[j]) {
                let temp = ary[i];
                ary[i] = ary[j];
                ary[j] = temp;
            }
        }
    }
    console.log(ary);
}