冒泡排序

53 阅读1分钟

冒泡排序 (基础版, 没有优化)

        for (var j = 0; j < arr.length; j++) {
            for (var i = 0; i < arr.length; i++) {
                if (arr[i] > arr[i + 1]) {
                    var temp = arr[i]
                    arr[i] = arr[i + 1]
                    arr[i + 1] = temp
                }
            }
            console.log('第 ', j + 1, ' 轮冒泡排序后: ', arr)
        }

分析

  1. 数组的前后两项交换 ([0][1])
        var temp = arr[0]   // [0] 拥有了备份
        arr[0] = arr[1] // 将 [1] 的值 放在了 [0] 的位置上
        arr[1] = temp   // 将 原本 [0] 的值, 放在了 [1] 的位置上
        console.log(arr)
  1. 因为要做前后两项的对比, 所以我们需要先拿到数组的所有元素, 所以写了一个 for 循环在循环内部判断,如果前一项后一项的值要大, 那么将前后两项交换位置
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] > arr[i + 1]) {
                var temp = arr[i]   // 存储当前项的值
                arr[i] = arr[i + 1] // 将后一项的值 放在前一项的位置上
                arr[i + 1] = temp   // 将原本 前一项(当前项) 的值, 放在 后一项 的位置上
            }
        }
        console.log('第 1 轮冒泡排序后: ', arr)

        for (var i = 0; i < arr.length; i++) {
            if (arr[i] > arr[i + 1]) {
                var temp = arr[i]
                arr[i] = arr[i + 1]
                arr[i + 1] = temp
            }
        }
        console.log('第 2 轮冒泡排序后: ', arr)

        for (var i = 0; i < arr.length; i++) {
            if (arr[i] > arr[i + 1]) {
                var temp = arr[i]
                arr[i] = arr[i + 1]
                arr[i + 1] = temp
            }
        }
        console.log('第 3 轮冒泡排序后: ', arr)

        for (var i = 0; i < arr.length; i++) {
            if (arr[i] > arr[i + 1]) {
                var temp = arr[i]
                arr[i] = arr[i + 1]
                arr[i + 1] = temp
            }
        }
        console.log('第 4 轮冒泡排序后: ', arr)

        for (var i = 0; i < arr.length; i++) {
            if (arr[i] > arr[i + 1]) {
                var temp = arr[i]
                arr[i] = arr[i + 1]
                arr[i + 1] = temp
            }
        }
        console.log('第 5 轮冒泡排序后: ', arr)

        //.....

优化

        var arr = [9, 8, 7, 6, 5, 4, 3, 2, 1]
        for (var j = 0; j < arr.length - 1; j++) {
            for (var i = 0; i < arr.length - 1 - j; i++) {
                if (arr[i] > arr[i + 1]) {
                    var temp = arr[i]
                    arr[i] = arr[i + 1]
                    arr[i + 1] = temp
                }
            }
        }