精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

今天說的是必須要熟練掌握的歸并排序

開發 前端
歸并排序是必須要熟練掌握的排序算法,是面試高頻考點,下面我們就一起來扒一扒歸并排序吧,原理很簡單,大家一下就能搞懂。

 之前給大家介紹了幾個簡單排序,大家只需了解即可,下面介紹的大家就需要熟練掌握了,是面試高頻考點,該文章分別用了遞歸法和迭代法實現 2 路歸并,希望對大家有一丟丟的幫助。

歸并排序 (Merge Sort)

歸并排序是必須要熟練掌握的排序算法,是面試高頻考點,下面我們就一起來扒一扒歸并排序吧,原理很簡單,大家一下就能搞懂。

袁記菜館內

第 23 屆食神爭霸賽開賽啦!

袁廚想在自己排名前4的分店中,挑選一個最優秀的廚師來參加食神爭霸賽,選拔規則如下。

第一場 PK:每個分店選出兩名廚師,首先進行店內 PK,選出店內里的勝者

第二場 PK: 然后店內的優勝者代表分店挑戰其他某一分店的勝者(半決賽)

第三場 PK:最后剩下的兩名勝者進行PK,選出最后的勝者。

示意圖如下

廚神爭霸賽

上面的例子大家應該不會陌生吧,其實我們歸并排序和食神選拔賽的流程是有些相似的,下面我們一起來看一下歸并排序吧。

歸并這個詞語的含義就是合并,并入的意思,而在我們的數據結構中的定義是將兩個或兩個以上的有序表合成一個新的有序表。而我們這里說的歸并排序就是使用歸并的思想實現的排序方法。

歸并排序使用的就是分治思想。顧名思義就是分而治之,將一個大問題分解成若干個小的子問題來解決。小的子問題解決了,大問題也就解決了。分治后面會專門寫一篇文章進行描述,這里先簡單提一下。

下面我們通過一個圖片來描述一下歸并排序的數據變換情況,見下圖。

歸并排序

我們簡單了解了歸并排序的思想,從上面的描述中,我們可以知道算法的歸并過程是比較難實現的,這也是這個算法的重點,我們先通過一個視頻來看一下歸并函數的具體步驟,看完我們這個視頻就能懂個大概啦。

視頻號

視頻中歸并步驟大家有沒有看懂呀,沒看懂也不用著急,下面我們一起來拆解一下,歸并過程共分三步走。

第一步:創建一個額外大集合用于存儲歸并結果,長度則為那兩個小集合的和,從視頻中也可以看出

第二步:我們從左自右比較兩個指針指向的值,將較小的那個存入大集合中,存入之后指針移動,并繼續比較,直到某一小集合的元素全部都存到大集合中。見下圖

合并

第三步:當某一小集合元素全部放入大集合中,則需將另一小集合中剩余的所有元素存到大集合中,見下圖

好啦,看完視頻和圖解是不是能夠寫出個大概啦,了解了算法原理之后代碼寫起來就很簡單啦,

下面我們看代碼吧。

注:這里用了System.arraycopy(),大家也可以使用其他方法,其中的五個參數分別是,源數組,目的數組,源數組起始索引,目的數組放置的起始索引,復制的長度

  1. class Solution { 
  2.     public int[] sortArray(int[] nums) { 
  3.         mergeSort(nums,0,nums.length-1); 
  4.         return nums; 
  5.     } 
  6.     public void mergeSort(int[] arr, int leftint right) { 
  7.         if (left < right) { 
  8.             int mid = left + ((right - left) >> 1); 
  9.             mergeSort(arr,left,mid); 
  10.             mergeSort(arr,mid+1,right); 
  11.             merge(arr,left,mid,right); 
  12.         } 
  13.     }  
  14.     //歸并 
  15.     public void merge(int[] arr,int leftint mid, int right) { 
  16.         //第一步,定義一個新的臨時數組 
  17.         int[] temparr = new int[right -left + 1]; 
  18.         int temp1 = left, temp2 = mid + 1; 
  19.         int index = 0; 
  20.         //對應第二步,比較每個指針指向的值,小的存入大集合 
  21.         while (temp1 <= mid && temp2 <= right) { 
  22.             if (arr[temp1] <= arr[temp2]) { 
  23.                 temparr[index++] = arr[temp1++]; 
  24.             } else { 
  25.                 temparr[index++] = arr[temp2++]; 
  26.             } 
  27.         } 
  28.         //對應第三步,將某一小集合的剩余元素存到大集合中 
  29.         if (temp1 <= mid) System.arraycopy(arr, temp1, temparr, index, mid - temp1 + 1); 
  30.         if (temp2 <= right) System.arraycopy(arr, temp2, temparr, indexright -temp2 + 1);     
  31.         System.arraycopy(temparr,0,arr,0+left,right-left+1);  
  32.     } 

歸并排序時間復雜度分析

我們一趟歸并,需要將兩個小集合的長度放到大集合中,則需要將待排序序列中的所有記錄掃描一遍所以時間復雜度為O(n)。

歸并排序把集合一層一層的折半分組,則由完全二叉樹的深度可知,整個排序過程需要進行 logn(向上取整)次,則總的時間復雜度為 O(nlogn)。

另外歸并排序的執行效率與要排序的原始數組的有序程度無關,所以在最好,最壞,平均情況下時間復雜度均為 O(nlogn) 。

雖然歸并排序時間復雜度很穩定,但是他的應用范圍卻不如快速排序廣泛,這是因為歸并排序不是原地排序算法,空間復雜度不為 O(1),那么他的空間復雜度為多少呢?

歸并排序的空間復雜度分析

歸并排序所創建的臨時結合都會在方法結束時釋放,單次歸并排序的最大空間是 n ,所以歸并排序的空間復雜度為 O(n).

歸并排序的穩定性分析

歸并排序的穩定性,要看我們的 merge 函數,我們代碼中設置了 arr[temp1] <= arr[temp2] ,當兩個元素相同時,先放入arr[temp1] 的值到大集合中,所以兩個相同元素的相對位置沒有發生改變,所以歸并排序是穩定的排序算法。

等等還沒完嘞,不要走呀。

歸并排序的遞歸實現是比較常見的,也是比較容易理解的,下面我們一起來扒一下歸并排序的迭代寫法??纯此窃趺磳崿F的。

我們通過一個視頻來了解下迭代方法的思想

視頻號

是不是通過視頻了解個大概啦,下面我們來對視頻進行解析。

迭代實現的歸并排序是將小集合合成大集合,小集合大小為 1,2,4,8,…..。依次迭代,見下圖

比如此時小集合大小為 1 。兩個小集合分別為 [3],[1]。

然后我們根據合并規則,見第一個視頻,將[3],[1]合并到臨時數組中,則小的先進,進而實現了排序,然后再將臨時數組的元素復制到原來數組中。則實現了一次合并。

下面則繼續合并[4],[6]。具體步驟一致。所有的小集合合并完成后,則小集合的大小變為 2,繼續執行剛才步驟,見下圖。

此時子集合的大小為 2 ,則為 [2,5],[1,3] 繼續按照上面的規則合并到臨時數組中完成排序。這就是迭代法的具體執行過程,

下面我們直接看代碼吧。

注:遞歸法和迭代法的 merge 函數代碼一樣。

  1. class Solution { 
  2.     public int[] sortArray (int[] nums) { 
  3.         //代表子集合大小,1,2,4,8,16..... 
  4.         int k = 1; 
  5.         int len = nums.length; 
  6.         while (k < len) { 
  7.             mergePass(nums,k,len); 
  8.             k *= 2; 
  9.         } 
  10.         return nums; 
  11.  
  12.     } 
  13.     public void mergePass (int[] array, int k, int len) { 
  14.  
  15.          int i; 
  16.          for (i = 0; i < len-2*k; i += 2*k) { 
  17.              //歸并 
  18.              merge(array,i,i+k-1,i+2*k-1); 
  19.          } 
  20.          //歸并最后兩個序列 
  21.          if (i + k < len) { 
  22.              merge(array,i,i+k-1,len-1); 
  23.          } 
  24.  
  25.     } 
  26.      public void merge (int[] arr,int leftint mid, int right) { 
  27.         //第一步,定義一個新的臨時數組 
  28.         int[] temparr = new int[right -left + 1]; 
  29.         int temp1 = left, temp2 = mid + 1; 
  30.         int index = 0; 
  31.         //對應第二步,比較每個指針指向的值,小的存入大集合 
  32.         while (temp1 <= mid && temp2 <= right) { 
  33.             if (arr[temp1] <= arr[temp2]) { 
  34.                 temparr[index++] = arr[temp1++]; 
  35.             } else { 
  36.                 temparr[index++] = arr[temp2++]; 
  37.             } 
  38.         } 
  39.         //對應第三步,將某一小集合的剩余元素存到大集合中 
  40.         if (temp1 <= mid) System.arraycopy(arr, temp1, temparr, index, mid - temp1 + 1); 
  41.         if (temp2 <= right) System.arraycopy(arr, temp2, temparr, indexright -temp2 + 1);    
  42.         //將大集合的元素復制回原數組 
  43.         System.arraycopy(temparr,0,arr,0+left,right-left+1);  
  44.     } 

通過上面的視頻解析和代碼,希望大家能夠將歸并排序給拿下,下面會給大家寫一下,歸并排序在實際刷題時的應用,感謝閱讀。

本文轉載自微信公眾號「袁廚的算法小屋」,可以通過以下二維碼關注。轉載本文請聯系袁廚的算法小屋 公眾號。

 

責任編輯:武曉燕 來源: 袁廚的算法小屋
相關推薦

2021-01-16 11:44:46

編程語言開發

2009-12-04 08:53:49

TechNet雜志

2020-01-09 08:26:16

代碼JS開發

2009-12-16 17:31:30

Ruby on Rai

2021-12-03 18:04:06

命令 RabbitMQ Web

2019-07-11 10:45:34

MQ中間件 API

2021-03-01 08:02:55

算法排序操作

2009-07-15 09:09:45

Vim編輯器使用Vim備份

2011-04-20 14:29:07

歸并排序

2018-06-12 15:55:07

編程語言Java加密方式

2019-08-07 15:20:08

Git開源命令

2009-10-29 15:50:49

VB.NET Exce

2023-10-09 07:11:03

排序算法序列

2019-06-20 17:39:12

Android啟動優化

2022-04-06 08:58:39

歸并排序Go算法

2019-12-27 15:05:11

LinuxWindowsDNS

2015-05-07 15:13:22

JS實現JQueryJQuery

2021-10-21 08:13:11

Springboot

2019-05-27 10:20:45

2020-04-08 17:10:03

GitHub代碼開源
點贊
收藏

51CTO技術棧公眾號

欧美一级精品大片| 一区二区三区在线视频观看58| 国产成+人+综合+亚洲欧洲| 成人在线手机视频| 国产露脸91国语对白| 欧美午夜不卡影院在线观看完整版免费| 精品久久久久久无| 亚洲图色在线| 欧美一级淫片免费视频魅影视频| 久久久久久久尹人综合网亚洲| www日韩中文字幕在线看| 亚洲图片欧美另类| 玖玖精品在线| 精品福利在线观看| 综合网五月天| 中文精品久久久久人妻不卡| 综合激情在线| 亚洲图片欧美日产| 日本一卡二卡在线| 国色天香久久精品国产一区| 欧美性极品少妇精品网站| 国产不卡一区二区在线观看 | 超碰免费在线| 成人免费av资源| 成人性生交大片免费观看嘿嘿视频| 毛片视频网站在线观看| 一本到12不卡视频在线dvd| 国产婷婷色综合av蜜臀av| 性高潮久久久久久| 欧美黄页免费| 欧美性生交片4| 欧美色图色综合| 蜜乳av一区| 国产精品九色蝌蚪自拍| 日韩区国产区| 香蕉人妻av久久久久天天| 国产主播一区二区| 国产在线精品播放| 中文字幕 欧美激情| 一区二区三区福利| 97精品欧美一区二区三区| 午夜精品福利在线视频| 日韩www.| 伊人亚洲福利一区二区三区| 天堂久久精品忘忧草| 卡通动漫国产精品| 亚洲精品成人久久电影| 国产a级黄色片| 电影一区二区在线观看| 精品久久国产字幕高潮| 性生活一级大片| 粉嫩av国产一区二区三区| 欧美日韩精品一区视频| 最近中文字幕免费mv| 国产高中女学生第一次| 亚洲小说欧美另类婷婷| 欧美人与性动交| 国产亚洲成人精品| 在线成人亚洲| 欧美中文在线视频| 丰满少妇xoxoxo视频| 久久久久久黄| 国产日韩精品综合网站| 国产美女精品视频国产| 国产九色精品成人porny | 精品女人视频| 亚洲美女免费精品视频在线观看| 日韩精品电影一区二区| 精品久久久久久久久久久下田| 一区二区三区四区在线观看视频| 2017亚洲天堂| 欧美性色综合| 欧美一级bbbbb性bbbb喷潮片| 国产又大又粗又爽| 免费成人性网站| 亚洲xxxx视频| 嫩草影院一区二区| 久久久精品国产免大香伊| 亚洲欧美日韩国产成人综合一二三区| 91社区在线观看播放| 亚洲欧美日韩在线播放| 日日碰狠狠添天天爽超碰97| 成人黄色免费短视频| 91精品国产综合久久久蜜臀粉嫩| 成人一区二区三区仙踪林| 免费成人蒂法| www.午夜精品| 国产精品18p| 美女www一区二区| 97碰碰视频| 番号在线播放| 一区二区三区精品| 欧美性猛交久久久乱大交小说| 最新超碰在线| 欧美视频不卡中文| 亚洲精品成人在线播放| 美女呻吟一区| 操91在线视频| 免费无码国产精品| 国产精品69毛片高清亚洲| 日本精品一区二区三区高清 久久| 亚洲最大成人在线| 国产第一区电影| 搜索黄色一级片| 亚洲免费大片| 亚洲aⅴ男人的天堂在线观看| 手机在线精品视频| 亚洲欧美激情插| 国产伦精品一区二区三区四区视频_| 国产精品高清乱码在线观看| 精品国产99国产精品| 色撸撸在线视频| 亚洲免费激情| 91在线精品观看| 波多野结衣在线影院| 亚洲成人激情自拍| 亚洲综合123| 欧美一区电影| 91av福利视频| 日韩一级中文字幕| 一区二区三区不卡视频 | 美女视频一区二区| 久久人人97超碰人人澡爱香蕉| 国产一级片一区二区| 国产成人在线视频网址| 亚洲一区bb| 午夜免费高清视频| 99精品国产九九国产精品| 亚洲精品综合久久中文字幕| 久久精品黄色片| 麻豆91精品视频| 日本高清不卡三区| 末成年女av片一区二区下载| 亚州成人在线电影| 国产精品嫩草影视| 日韩久久久久| 国产精品第3页| 午夜av免费观看| 亚洲超碰精品一区二区| 美女又黄又免费的视频| 艳女tv在线观看国产一区| 国产日韩亚洲欧美| 午夜精品一区| 欧洲一区二区三区免费视频| 中文字幕在线看高清电影| 中文欧美日韩| 久久久久资源| 欧美一区 二区 三区| 亚洲免费小视频| 91久久国产综合久久91| 久久精品综合网| av丝袜天堂网| 日韩欧美午夜| 91精品久久久久久久久久入口| 91精彩视频在线观看| 欧美日本一区二区| 三上悠亚在线观看视频| 国产毛片精品视频| 日本道在线视频| 黄在线观看免费网站ktv| 精品国产91乱码一区二区三区| 国产真人真事毛片| 91在线一区二区三区| 日韩中文字幕二区| 精品国产一区二区三区2021| 久久精品国产亚洲7777| 国产视频手机在线| 亚洲国产日韩综合久久精品| 久久人人妻人人人人妻性色av| 久久国产一二区| 视频二区一区| 极品在线视频| 国产亚洲欧美视频| 国产又粗又长视频| 亚洲高清三级视频| 午夜理伦三级做爰电影| 免费精品视频最新在线| 欧美性受黑人性爽| 极品国产人妖chinesets亚洲人妖| 欧美一区二区三区免费观看| av中文字幕一区二区三区| 日韩免费一区二区| 蜜桃视频最新网址| 丁香婷婷综合五月| 久久国产乱子伦免费精品| 91综合久久| 国产福利精品在线| 国产精品久久久久久福利| 日韩欧美色电影| 黄色大片网站在线观看| 中文字幕在线视频一区| 荫蒂被男人添免费视频| 免费人成网站在线观看欧美高清| 妞干网在线播放| 国产欧美日韩视频在线| av一本久道久久波多野结衣| 亚洲欧美小说色综合小说一区| 美女av一区二区三区| 免费人成黄页在线观看忧物| 日韩午夜av一区| 国产在线一级片| 亚洲成av人片一区二区三区| 日本成人午夜影院| 99riav久久精品riav| 99中文字幕在线| 丝袜美腿亚洲一区| 精品久久久久久无码中文野结衣| 日韩伦理视频| 欧美成人蜜桃| 老头老太做爰xxx视频| 99热这里只有精品4| 国产不卡一区视频| 99热这里只有精品在线播放| 在线国产日韩| 婷婷视频在线播放| 国产精品一区二区99| 国产精品裸体一区二区三区| 日韩av黄色| 国产精品美女免费| 日本不卡网站| 欧美黄色小视频| 精品麻豆一区二区三区| 国产亚洲欧美日韩美女| 你懂的好爽在线观看| 精品国产乱码久久久久久夜甘婷婷| 国产又粗又黄又爽视频| 国产精品一区二区三区99| 亚洲精品乱码久久久久久自慰| 亚洲另类黄色| www.xxx麻豆| 一区二区三区午夜探花| 亚洲人成人77777线观看| 你微笑时很美电视剧整集高清不卡| 日本精品在线视频| heyzo在线播放| 高清一区二区三区日本久| 麻豆蜜桃在线| 久久久久国产精品www| 制服丝袜在线播放| 欧美国产第二页| 色呦呦在线看| 欧美高清性猛交| 春色校园综合激情亚洲| 午夜欧美大片免费观看| 美女搞黄视频在线观看| 91精品国产99| 91精品论坛| 日本伊人精品一区二区三区介绍 | 成人台湾亚洲精品一区二区 | 欧美美女福利视频| 国产精品专区h在线观看| 国产亚洲欧美日韩精品一区二区三区| 国产精品久久久久免费a∨| 成人在线免费电影网站| 国产日本欧美一区| 成人免费观看49www在线观看| 亚洲aⅴ男人的天堂在线观看| 日本免费精品| 久久99精品国产99久久| 国产真实有声精品录音| 色噜噜狠狠一区二区三区| 日韩av自拍| 日韩成人手机在线| 欧美一级专区| 蜜桃免费在线视频| 国产一区二区三区免费| 国产一线在线观看| 日本一区二区三区国色天香| 91麻豆精品成人一区二区| 亚洲一区视频在线观看视频| 日本五十路女优| 欧洲在线/亚洲| 精品毛片一区二区三区| 在线视频中文字幕一区二区| 伊人久久一区二区| 日韩欧美色综合| 青青视频在线观| 日韩在线视频免费观看高清中文| 午夜激情在线| 日本免费久久高清视频| 99视频这里有精品| 精品国产乱码久久久久久108| 欧美久久综合网| 亚洲天堂第一区| 欧美亚洲三级| 久久久久久久久久久影视| 久久久久免费观看| 成年人一级黄色片| 欧美日韩亚洲视频一区| 国产精品区在线观看| 亚洲精品xxxx| 操你啦在线视频| 奇米一区二区三区四区久久| 国产精品日本一区二区三区在线| 久久久久久久久久久久久9999| 国产精品成人av| 99久久国产宗和精品1上映| 国产精品1024久久| 久久婷婷五月综合| 亚洲成人一区二区| 97精品人妻一区二区三区香蕉| 亚洲国产精品国自产拍av秋霞| 91社区在线| 国产suv精品一区二区三区88区| 国产在线一区不卡| 亚洲成人自拍| 在线综合欧美| 久久无码专区国产精品s| 国产精品天美传媒沈樵| 日韩欧美在线观看免费| 欧美精品一区二区在线观看| 国产黄色在线观看| 国产日韩换脸av一区在线观看| 日日天天久久| 人妻无码久久一区二区三区免费| 国产一区二区免费在线| 伊人影院综合网| 欧美性精品220| 色综合久久久久久| 欧美高跟鞋交xxxxxhd| 国产专区精品| 波多野结衣三级在线| 蜜臀av性久久久久av蜜臀妖精| 午夜一区二区三区免费| 亚洲成人自拍一区| 欧美视频一二区| 久久久欧美精品| 一区二区三区国产好| 天堂av在线中文| 精品一区在线看| 无码国产精品一区二区高潮| 国产精品免费aⅴ片在线观看| 色屁屁影院www国产高清麻豆| 亚洲激情视频网站| 暧暧视频在线免费观看| 俄罗斯精品一区二区三区| 外国成人免费视频| 涩涩网站在线看| 成人欧美一区二区三区| 国产精品美女一区| 久久久91精品国产| 成人豆花视频| 蜜臀av.com| 国产精品1区2区| 久久久综合久久久| 精品国产91乱码一区二区三区| 欧美xxx黑人xxx水蜜桃| 国产精品一区免费观看| 亚洲看片一区| 丰腴饱满的极品熟妇| 色哟哟精品一区| a天堂中文在线88| 成人精品视频久久久久| 亚洲成人最新网站| 麻豆tv在线观看| 精品成人国产在线观看男人呻吟| 午夜福利视频一区二区| 啪一啪鲁一鲁2019在线视频| 国产午夜一区| 在线观看国产福利| 亚洲最大的成人av| 天天操天天射天天舔| 日韩av手机在线看| 999精品视频| aaaaa黄色片| 福利一区视频在线观看| 黄色av免费在线看| 91免费电影网站| 亚洲人成亚洲精品| 成人中文字幕av| 亚洲品质自拍视频网站| 欧美视频xxx| 国产精品流白浆视频| 亚洲情侣在线| 艳妇乳肉亭妇荡乳av| 欧美性色综合网| heyzo在线播放| 亚洲一区二区三区乱码| 国产成人精品影视| 欧美一级片免费在线观看| 最近2019年手机中文字幕| 日本超碰一区二区| 国产主播在线看| 国产精品久久久久婷婷| wwwav网站| 国产精品都在这里| 欧美日韩三级| 免费看裸体网站| 亚洲成人精品久久久| 亚洲精品一区三区三区在线观看| 免费的一级黄色片| 亚洲国产电影在线观看| 日韩中文字幕免费观看| 国产欧美日韩精品丝袜高跟鞋| 亚洲午夜久久久久久尤物| 青娱乐国产视频| 精品国产91乱码一区二区三区| 色婷婷成人网| 无遮挡又爽又刺激的视频 | 天堂8在线天堂资源bt|