冒泡排序

55 阅读1分钟

function swap(arr, i, j) {
    let temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
    return arr;
}

Array.prototype.bubble = function bubble() {
    // this -> ary
    let _this = this,
        flag = false;
    // 控制循环多少轮
    for (let i = 0; i < _this.length - 1; i++) {
        // 控制每一轮循环多少次
        for (let j = 0; j < _this.length - 1 - i; j++) {
            // 交换位置
            if (_this[j] > _this[j + 1]) {
                swap(_this, j, j + 1);
                flag = true;
            }
        }
        if (!flag) break; //优化,一旦发现循环了一轮还是false,就说明已经排好序了
        flag = false; //如果循环没有结束,将标识设置为false
    }
    return _this;
}


let ary = [12, 8, 24, 16, 1];
ary.bubble();
console.log(ary);   //==>输出[1,8,12,16,24]



简单实现:

function swap(arr, i, j) {
    let temp = arr[i]
    arr[i] = arr[j]
    arr[j] = temp
}
var arr = [1, 4, 21, 45, 24, 23],
    flag = false

//正序

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]) {
            swap(arr, j + 1, j)
            flag = true
        }
    }
    if (!flag) break
    flag = false
}