成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

說下希爾排序的過程? 希爾排序的時間復雜度和空間復雜度又是多少?

開發 前端
1959年Shell發明,第一個突破 O(n^2^) 的排序算法,是簡單插入排序的改進版。它與插入排序的不同之處在于,它會優先比較距離較遠的元素。

[[429028]]

1959年Shell發明,第一個突破 O(n^2^) 的排序算法,是簡單插入排序的改進版。它與插入排序的不同之處在于,它會優先比較距離較遠的元素。

插入排序

插入排序的工作原理是通過構建有序序列,對于未排序數據,在已排序序列中從后向前掃描,找到相應位置并插入

代碼實現:

  1. function insertionSort(arr) { 
  2.     let n = arr.length; 
  3.     let preIndex, current
  4.     for (let i = 1; i < n; i++) { 
  5.         preIndex = i - 1; 
  6.         current = arr[i]; 
  7.         while (preIndex >= 0 && arr[preIndex] > current) { 
  8.             arr[preIndex + 1] = arr[preIndex]; 
  9.             preIndex--; 
  10.         } 
  11.         arr[preIndex + 1] = current
  12.     } 
  13.     return arr; 

插入算法的核心思想是取未排序區間中的元素,在已排序區間中找到合適的插入位置將其插入,并保證已排序區間數據一直有序。重復這個過程,直到未排序區間中元素為空,算法結束。

復雜度分析:

  • 時間復雜度:O(n^2^)
  • 空間復雜度:O(1)

希爾排序

回顧一下上面的插入排序:

  • 第一趟插入排序后,我們得到的有效序列長度為 2
  • 第二趟插入排序后,我們得到的有效序列長度為 3
  • ...
  • 直到這個序列有序

所以,如果序列足夠亂的話,時間復雜度為 O(n^2^)

希爾排序又是如何優化的喃?

希爾排序又叫縮小增量排序,就是把數列進行分組(組內不停使用插入排序),直至從宏觀上看起來有序,最后插入排序起來就容易了(無須多次移位或交換)。

其中組的數量稱為 增量 ,顯然的是,增量是不斷遞減的(直到增量為1)

那我們有是如何進行分組喃?

往往的: 如果一個數列有 8 個元素,我們第一趟的增量是 4 ,第二趟的增量是 2 ,第三趟的增量是 1 。如果一個數列有 18 個元素,我們第一趟的增量是 9 ,第二趟的增量是 4 ,第三趟的增量是2 ,第四趟的增量是 1

很明顯我們可以用一個序列來表示增量:n/2、(n/2)/2、...、1,每次增量都/2

例如:

  1. let arr = [4, 1, 5, 8, 7, 3] 

排序前:

將該數組看成三組( Math.floor(arr.length/2) ),分別是:[4, 1] , [5, 8] , [7, 3]

第一趟排序:

對三組數據分別進行插入排序,因此我們三個數組得到的結果為:[1, 4] , [5, 8] , [3, 7]

此時數組是這樣子的:[1, 4, 5, 8, 3, 7]

第二趟排序:

  • 增量減少了,上面增量是 3 ,此時增量應該為 1 了,因此把 [1, 4, 5, 8, 3, 7] 看成一個數組(從宏觀上是有序的了),對其進行插入排序,直至有序

代碼實現:

  1. function shellSort(arr) { 
  2.     let n = arr.length; 
  3.     for (let gap = Math.floor(n / 2); gap > 0; gap = Math.floor(gap / 2)) { 
  4.         for (let i = gap; i < n; i++) { 
  5.             let j = i; 
  6.             let current = arr[i]; 
  7.             while (j - gap >= 0 && current < arr[j - gap]) { 
  8.                  arr[j] = arr[j - gap]; 
  9.                  j = j - gap; 
  10.             } 
  11.             arr[j] = current
  12.         } 
  13.     } 
  14.     return arr; 

復雜度分析:

 

  • 時間復雜度:O(nlogn)
  • 空間復雜度:O(1)

 

責任編輯:武曉燕 來源: 三分鐘學前端
相關推薦

2021-01-05 10:41:42

算法時間空間

2024-04-25 08:33:25

算法時間復雜度空間復雜度

2009-07-09 10:45:16

C#基本概念復雜度遞歸與接口

2021-09-17 10:44:50

算法復雜度空間

2019-11-18 12:41:35

算法Python計算復雜性理論

2020-09-08 15:40:58

算法快速排序堆排序

2015-10-13 09:43:43

復雜度核心

2020-12-30 09:20:27

代碼

2021-06-28 06:15:14

算法Algorithm時間空間復雜度

2022-08-25 11:00:19

編程系統

2020-12-30 05:35:56

數據結構算法

2024-06-05 09:35:00

2021-11-09 06:00:01

快速排序時間復雜度排序

2024-05-20 09:04:29

時間復雜度代碼

2020-02-06 13:59:48

javascript算法復雜度

2018-12-18 10:11:37

軟件復雜度軟件系統軟件開發

2019-12-24 09:46:00

Linux設置密碼

2022-08-16 09:04:23

代碼圈圈復雜度節點

2021-04-25 14:29:02

數據結構動態數組時間復雜度

2014-12-10 09:23:14

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品乱 | 精品欧美一区二区精品久久久 | 亚洲成人免费观看 | 亚洲成人av| 亚洲在线一区 | 久久9久 | 亚洲最大福利网 | 中文字幕国产在线 | 精品麻豆剧传媒av国产九九九 | 国产1区2区3区 | 日韩精品三区 | 精品中文在线 | www午夜视频 | 日本一区二区在线视频 | 日本一区不卡 | 中文字字幕一区二区三区四区五区 | 999精品视频| 欧洲成人免费视频 | 99精品视频免费在线观看 | 精品久久久久一区二区国产 | 91直接看| 91av在线免费| 欧美中文视频 | 久久国产精品精品国产色婷婷 | 欧美日韩亚洲国产综合 | 国产欧美一区二区三区在线看 | 99re国产精品 | 在线观看免费黄色片 | 日韩免费一区 | 91视视频在线观看入口直接观看 | 天堂素人约啪 | 91久久国产综合久久 | 香蕉视频在线播放 | 久久网一区二区三区 | 久草在线影 | 一区二区三区欧美 | 亚洲精品一区中文字幕乱码 | 国产精品伦理一区二区三区 | 九九亚洲| 亚洲男人的天堂网站 | 亚洲小说图片 |