冒泡排序

一、原理

       ☆思想:通过比较,把较大或较小的数象水里的气泡一样浮上来,得到最大或最小值;

       ☆过程:以递增为例,用数组表示,长度为n,从首元素开始循环,每个元素和下一个元素相比,如果大于则交换位置,直到第n-2个元素,最后一个元素就是最大值;

                    再从首元素开始循环,直到第n-3个元素,第n-2个元素就是最大值;反复循环,每次获得剩余元素中的最大值,最终数组为升序;

二、实现代码

      JavaScript 代码实现

function bubbleSort(arr) {
    var done,temp;
    for (var i = 1; i < arr.length; i++) {

        done = true;

        for (var j = 0; j < arr.length - i; j++) {
            if (arr[j] > arr[j + 1]) {

                temp = arr[j];

                arr[j] = arr[j + 1];

                arr[j + 1] = temp;

                done = false;
            }

        }

        if (done) {
            break;
        }

        console.log(arr);
    }
}

三、优化

       设置一个标志done,每次循环初始化为true,如果元素有交换更新为false,本次循环结束判断,如果仍为true说明剩余元素有序,退出所有循环;

四、复杂度

名称 时间复杂度 空间复杂度  稳定性 
平均 最坏 最优
冒泡排序 O(n²) O(n²) O(n)  O(1)

      最坏情况,数组反序,最后一个元素,需要进行n-1次比较和交换,…第二个元素,需要进行1次比较和交换,共需要1+2+3+……+(n-1)=n(n-1)/2次比较和交换;

      最优情况,数组正序,最后一个元素,需要进行n-1次比较,没有交换就结束排序,共需要n-1次比较;

      本排序需要申请一个额外空间;

      相同元素不会交换,本排序稳定。

posted @ 2019-11-22 13:32  老余的水壶  阅读(171)  评论(0)    收藏  举报