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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

對數(shù)據(jù)結(jié)構(gòu)和算法的總結(jié)和思考(三)--希爾排序

希尔排序是第一个时间复杂度突破O(n^2)的高级算法。顾名思义,这就是被希尔发现的一种排序算法。算法本质为分组插入排序。具体实现为:

let count = 0;
function shellSort(arr) {
    let gap = 1, times = 2;
    while(gap < arr.length / times) {
        gap = gap * times + 1;
    }
    for (gap; gap > 0; gap = Math.floor(gap / times)) {
        console.log(gap);
        for (let i = gap; i < arr.length; i ++) {
            let temp = arr[i];
            flag = i;
            for (let j = i - gap; j >= 0 && arr[j] > temp; j-= gap) {
                count ++;
                arr[j + gap] = arr[j];
                flag = j;
            }
            arr[flag] = temp;
        }
    }

    return arr;
}
let sortArr = [];
for (let i = 0; i < 1000; i ++) {
    sortArr.push(parseInt(Math.random() * 1000));
}
let nativeSort = sortArr.concat([]);
console.time('shell');
console.log(shellSort(sortArr));
console.timeEnd('shell');

console.time('nativeSort');
console.log(nativeSort.sort());
console.timeEnd('nativeSort');
console.log(count);

我来解析下上面的代码。

   let gap = 1, times = 2;
    while(gap < arr.length / times) {
        gap = gap * times + 1;
    }

这一小段代码是确认一个间隙值,times是设置间隙值得倍数。此倍数可以任意设置,不过为2的时候相对表现比较好比较稳定。gap为间隙值,间隙值最后一次一定是1,设置间隙值的目的是为了分区比较,例如如果设置为times为2,那么第一次就是从中间开始左右两边比较,左边放较小值,右边放较大值,然后依次比较。

for (gap; gap > 0; gap = Math.floor(gap / times)) {
        console.log(gap);
        for (let i = gap; i < arr.length; i ++) {
            let temp = arr[i];
            flag = i;
            for (let j = i - gap; j >= 0 && arr[j] > temp; j-= gap) {
                count ++;
                arr[j + gap] = arr[j];
                flag = j;
            }
            arr[flag] = temp;
        }
    }

这一段代码就是分区进行比较的插入排序。由于是插入排序,排序的初始区间是有序的,所以可以只找到一个正确的插入位置就行,后续的一定是满足规则的,所以这一行j >= 0 && arr[j] > temp可以这样写,当然, arr[j] > temp也可以写在if语句里面。

由于是插入排序,很显然我们可以采用二分查找法进行优化,具体代码实现请童鞋们自己动手,如果有困难可以联系我,我会在github上附上对应的代码。

以上就是希尔排序的全部内容,下一篇为快速排序,thx。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯,就分享一下吧!

評論

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

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

100積分直接送

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

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

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

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

幫助反饋 APP下載

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

公眾號

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

舉報(bào)

0/150
提交
取消