0
点赞
收藏
分享

微信扫一扫

冒泡排序算法JS代码javascript

尤克乔乔 2022-02-03 阅读 50

冒泡排序原理

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换的元素,也就是说数列已经排序完成。

具体的原理就不详细说明了,csdn里有很多写得很好的文章:

冒泡排序(超详细)_hcz666的博客-CSDN博客_冒泡排序

JS代码实现

简单版:

// 冒泡排序从小到大
function bubbleSort(arr) {
    for (var i = 0; i < arr.length - 1; i++) { // 外层循环趟数
        for (var j = 0; j < arr.length - i - 1; j++) { // 里层循环 每一趟的交换次数
            // 大于则交换,小于则不变
            if (arr[j] > arr[j + 1]) {
                var temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    // 返回数组
    return arr;
}

优化版:

// 冒泡排序从小到大
function bubbleSort(arr) {
    // 如果是空数组或数组长度小于2则不需要排序,直接返回数组
    if (arr == null || arr.length < 2) {
        return arr;
    }
    for (var i = 0; i < arr.length - 1; i++) {
        // 初始值为true
        var isSorted = true;
        for (var j = 0; j < arr.length - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                isSorted = false; //有元素交换,所以还没有完成排序,标记变为false
                var temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
        // 若完成排序(isSorted值为true),则退出循环
        if (isSorted)
            break;
    }
    return arr;
}

进阶版:

// 冒泡排序从小到大
function bubbleSort(arr) {
    // 如果是空数组或数组长度小于2则不需要排序,直接返回数组
    if (arr == null || arr.length < 2) {
        return arr;
    }

    //记录最后一次交换的位置
    var lastExchangeIndex = 0;
    //无序数列的边界,每次比较只需要比到这里为止
    var sortBorder = arr.length - 1;

    for (var i = 0; i < arr.length - 1; i++) {
        // 初始值为true
        var isSorted = true;
        for (var j = 0; j < sortBorder; j++) {
            if (arr[j] > arr[j + 1]) {
                isSorted = false; //有元素交换,所以还没有完成排序,标记变为false
                var temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                lastExchangeIndex = j;
            }
        }
        sortBorder = lastExchangeIndex;
        // 若完成排序(isSorted值为true),则退出循环
        if (isSorted)
            break;
    }
    return arr;
}
举报

相关推荐

0 条评论