冒泡排序

113 阅读1分钟

排序数组:[5, 4, 6, 3, 8, 1, 7, 2, 10, 9]
描述:当前项与后一项比较,如果当前项大于后一项,则两者交换位置。
排序图解:冒泡排序图解.png 下面是一步一步的演化过程,可以直接复制代码,进行运行,查看结果:


const arr = [5, 4, 6, 3, 8, 1, 7, 2, 10, 9]
//找到第一个最大值,如图中的第一次排序
function sort1(arr) {
    for (let j = 0; j < arr.length - 1; j++) {
        if (arr[j] > arr[j + 1]) {
            //当前项与后一项比较,如果当前项大于后一项,则两者交换位置。
            [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
        }
    }
    return arr
}
console.log(sort1(arr))
//打印结果为:[4, 5, 3, 6,  1,7, 2, 8, 9, 10]
//因为要找到数组的每一个最大值.所有,要对当前数组的所有的值进行排序,所以在sort1上演变
function sort2(arr) {
    for (let i = 0; i < arr.length - 1; i++) {
        for (let j = 0; j < arr.length - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                //当前项与后一项比较,如果当前项大于后一项,则两者交换位置。
                [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
            }
        }
    }
    return arr
}
console.log(sort2(arr))
//打印结果为:[1, 2, 3, 4,  5,6, 7, 8, 9, 10]
//sort2已经可以排序了。但是,之前已经排好序的可以不用在排序的,所以每一次排序的长度为当前长度减去排过序的长度,可以在sort2上演变
function sort(arr) {
    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]) {
                [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
            }
        }
    }
    return arr
}

console.log(sort(arr))
//打印结果为:[1, 2, 3, 4,  5,6, 7, 8, 9, 10]