国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS實(shí)現(xiàn)希爾排序

chadLi / 2783人閱讀

摘要:希爾排序本質(zhì)上是一種插入排序,但是對(duì)數(shù)列進(jìn)行了等間隔分組處理,在每一組中做插入排序,這一優(yōu)化使得時(shí)間復(fù)雜度降到了以下。

希爾排序本質(zhì)上是一種插入排序,但是對(duì)數(shù)列進(jìn)行了等間隔分組處理,在每一組中做插入排序,這一優(yōu)化使得時(shí)間復(fù)雜度降到了O(n^2)以下。

基本思想

希爾排序是按一定的間隔對(duì)數(shù)列進(jìn)行分組,然后在每一個(gè)分組中做插入排序;隨后逐次縮小間隔,在每一個(gè)分組中做插入排序...直到間隔等于1,做一次插入排序后結(jié)束。

那么問題來了,間隔應(yīng)該取多大,怎么縮小?通常我們?nèi)ト〕跏奸g隔為數(shù)列長度的一半:gap = length/2,以 gap = gap/2 的方式縮小,下面詳細(xì)圖解整個(gè)過程。

原始數(shù)組數(shù)組如下:

首先取間隔為 gap = length/2 = 4,將數(shù)組分為如下的4組,對(duì)每一組實(shí)施插入排序:

第一次排序,每一組較小的元素都移到了相對(duì)靠前的位置(這個(gè)狀態(tài)可以叫 n-sorted,即以n為gap分組有序),可以想象相對(duì)有序的數(shù)組可能更有利于后面的排序。接著繼續(xù)分組,gap = gap/2 = 2,對(duì)每一組實(shí)施插入排序:

繼續(xù)對(duì)數(shù)組分組,gap = gap/2 = 1,即所有元素組成一組,做插入排序完成算法:

代碼實(shí)現(xiàn)

內(nèi)層循環(huán)使用的插入排序與普通的插入排序基本一致,只是每次移動(dòng)的步長變?yōu)?gap 而不是 1:

// shellSort
function shellSort(arr) {
  for(let gap = Math.floor(arr.length/2); gap > 0; gap = Math.floor(gap/2)) {
    // 內(nèi)層循環(huán)與插入排序的寫法基本一致,只是每次移動(dòng)的步長變?yōu)?gap
    for(let i = gap; i < arr.length; i++) {
      let j = i;
      let temp = arr[j];
      for(; j> 0; j -= gap) {
        if(temp >= arr[j-gap]) {
          break;
        }
        arr[j] = arr[j-gap];
      }
      arr[j] = temp;
    }
  }
  return arr;
}

// example
let arr = [2,5,10,7,10,32,90,9,11,1,0,10];
alert(shellSort(arr));

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/95943.html

相關(guān)文章

  • JS中可能用得到的全部的排序算法

    本篇有7k+字, 系統(tǒng)梳理了js中常見的12種排序算法。除了基本排序算法,文章還包含了希爾排序、堆排序、桶排序等較為復(fù)雜的排序?qū)崿F(xiàn),如果喜歡請(qǐng)點(diǎn)贊支持~謝謝. 原文: http://louiszhai.github.io/20... 導(dǎo)讀 排序算法可以稱得上是我的盲點(diǎn), 曾幾何時(shí)當(dāng)我知道Chrome的Array.prototype.sort使用了快速排序時(shí), 我的內(nèi)心是奔潰的(啥是快排, 我只知道...

    verano 評(píng)論0 收藏0
  • 基本算法學(xué)習(xí)(一)之希爾排序(JS)

    摘要:動(dòng)態(tài)定義間隔序列參考來源詳細(xì)介紹了十種算法大家可以去學(xué)習(xí)下以后大概會(huì)盡量每天更新一個(gè)算法學(xué)習(xí)吧溫故而知新 參考書:嚴(yán)蔚敏-數(shù)據(jù)結(jié)構(gòu) 希爾排序(Shells Sort) 希爾排序又稱縮小增量排序,歸屬于插入排序一類,簡單來說,和我們的插入排序比,它更快. 奇妙的記憶點(diǎn): 內(nèi)排序(內(nèi)存排序就夠了) 不穩(wěn)定(排序后原始順序無法保證) 希爾排序重點(diǎn)在于分割. 基本思想: 將整個(gè)待排序記錄序...

    cooxer 評(píng)論0 收藏0
  • JavaScript 數(shù)據(jù)結(jié)構(gòu)與算法之美 - 歸并排序、快速排序希爾排序、堆排序

    摘要:之所以把歸并排序快速排序希爾排序堆排序放在一起比較,是因?yàn)樗鼈兊钠骄鶗r(shí)間復(fù)雜度都為。歸并排序是一種穩(wěn)定的排序方法。因此,快速排序并不穩(wěn)定。希爾排序思想先將整個(gè)待排序的記錄序列分割成為若干子序列。 showImg(https://segmentfault.com/img/bVbvpYZ?w=900&h=250); 1. 前言 算法為王。 想學(xué)好前端,先練好內(nèi)功,只有內(nèi)功深厚者,前端之路才...

    haitiancoder 評(píng)論0 收藏0
  • 排序之八大絕技

    摘要:需要注意的是排升序要建大堆,排降序建小堆。應(yīng)用場(chǎng)景需要前個(gè)最大或最小元素時(shí),或者與其他排序一塊使用五冒泡排序排序思想大的元素向下沉,小的元素向上浮。 目錄 一.插入排序 1.插入排序思想 2.動(dòng)態(tài)圖形演示 ?3.插排思路與圖解 4.插入排序代碼實(shí)現(xiàn)(升序) 5.時(shí)間復(fù)雜度,空間復(fù)雜度及穩(wěn)定...

    Vixb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<