第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

JS冒泡排序

標(biāo)簽:
JavaScript

冒泡排序

原理:遍历整个数组,依次比较相邻的两个值,如果前一个值比后面的值大,即交换他们的位置,依照这个规则进行多次并且递减的迭代,直到顺序正确。

代码实现:

function bubbleSort(arr) {

    // 检测传入的 arr 是否为数组,如果不是数组,直接返回该本身
    if (Object.prototype.toString.call(arr) !== '[object Array]') {
        return arr;
    }

    var len = arr.length;
    
    // 如果长度为1或者为0,直接返回该数组
    if (len <= 1) {
        return arr;
    }

    for (var i = 0; i < len - 1; i++) {
        for (var j = 0; j < len - 1 - i; j++) {

            if (arr[j] > arr[j + 1]) {
                var temp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = temp;
            }

        }
    }

    return arr;
}

算法概念

  • 时间复杂度指的是一个算法执行所耗费的时间
  • 空间复杂度指运行完一个程序所需内存的大小
  • 稳定指如果a=b,a在b的前面,排序后a仍然在b的前面
  • 不稳定指如果a=b,a在b的前面,排序后可能会交换位置

时间复杂度测试

/**
 * 生成随机数
 * @param lower 开始的数值
 * @param upper 结尾的数值
 * @returns 生成[lower, upper] 之间的随机数
 */
function getRandom(lower, upper) {
    return Math.floor(Math.random() * (upper - lower)) + lower;
}

/**
 * 获取随机数组
 * @param len 生成数组长度
 * @returns 随机生成长度为len的数组
 */
function getArr(len) {
    var arr = [];
    for (var i = 0; i < len; i++) {
        arr.push(getRandom(1, len));
    }

    return arr;
}

/**
 *  测试最好情况生成的有序数组
 * @param len 生成数组长度
 * @returns 生成有序长度为len的数组
 */
function getBestArr(len) {
    var bestArr = []
    for (var i = 1; i <= len; i++) {
        bestArr.push(i);
    }

    return bestArr;
}

/**
 * 测试最坏情况所有的数字随机(极少情况下重复)
 * @param len 生成数组长度
 * @returns 随机无序不重复长度为len的数组
 */
function getBadArr(len) {
    var badArr = []
    for (var i = len; i > 0; i--) {
        badArr.push(i + getRandom(1, 100));
    }

    return badArr;
}

/**
 * 测试算法sortName运行opCount个排序操作所需要的时间
 * @param sortName 算法名字
 * @param opCount 操作的个数
 * @returns 耗时间
 */
function testSortCountTime(sortName, opCount) {
    // 记录排序前当前时间
    var nowTime = new Date().getTime();
    sortName(opCount);
    // 记录排序完时间
    var doneTime = new Date().getTime();

    return "耗时:" + ((doneTime - nowTime) / 1000.0) + "s";
}

// 需要测试的个数
const TEXT_NUM = 10000;
console.log("测试的个数为:" + TEXT_NUM);

// 平均时间复杂度测试(随机)
console.log("平均时间复杂度" + testSortCountTime(bubbleSort, getArr(TEXT_NUM)));

// 测试最好的时间复杂度测试情况
console.log("最好的时间复杂度" + testSortCountTime(bubbleSort, getBestArr(TEXT_NUM)));

// 测试最坏的时间复杂度测试情况
console.log("最坏的时间复杂度" + testSortCountTime(bubbleSort, getBadArr(TEXT_NUM)));

/**
 *   JSFunction git:(master)  node bubbleSort.js
 测试的个数为:10000
 平均时间复杂度耗时:0.589s
 最好的时间复杂度耗时:0.569s
 最坏的时间复杂度耗时:0.591s
   JSFunction git:(master)  node bubbleSort.js
 测试的个数为:20000
 平均时间复杂度耗时:2.291s
 最好的时间复杂度耗时:2.213s
 最坏的时间复杂度耗时:2.323s
   JSFunction git:(master)  node bubbleSort.js
 测试的个数为:30000
 平均时间复杂度耗时:5.202s
 最好的时间复杂度耗时:4.955s
 最坏的时间复杂度耗时:5.297s
   JSFunction git:(master)  node bubbleSort.js
 测试的个数为:40000
 平均时间复杂度耗时:9.216s
 最好的时间复杂度耗时:8.822s
 最坏的时间复杂度耗时:9.74s
   JSFunction git:(master)  node bubbleSort.js
 测试的个数为:50000
 平均时间复杂度耗时:14.619s
 最好的时间复杂度耗时:13.655s
 最坏的时间复杂度耗时:14.708s

 Tips: 耗时时可能会有偏差,因电脑的配置有一点关系,不过影响不会很大。
 */

总结

冒泡排序分析

  • 时间复杂度: 平均时间复杂度O(n*n) 、最好情况O(n)、最差情况O(n*n)
  • 空间复杂度: O(1)
  • 稳定性:稳定

冒泡排序优缺点

  • 排序算法的基础,简单实用易于理解
  • 缺点是比较次数多,效率较低
點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消