精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

午夜小视频在线| 国产suv一区二区三区| 中文字幕乱码在线播放| 2021国产精品久久精品| 国产精品久久久久999| 日韩毛片无码永久免费看| 国产日本久久| 一级中文字幕一区二区| 国内精品视频在线播放| 久久国产香蕉视频| 欧美 日韩 国产一区二区在线视频| 精品久久久久久最新网址| 男人天堂网视频| 日本a在线播放| thepron国产精品| 国产精品日韩欧美综合| 动漫精品一区一码二码三码四码| 精品在线播放| 日韩欧美国产不卡| 日本熟妇人妻中出| 久草成色在线| 国产精品人妖ts系列视频| 国产91视觉| 久久久999久久久| 亚洲区一区二| 日韩综合中文字幕| 在线观看免费视频黄| 综合在线影院| 亚洲超碰精品一区二区| 欧美爱爱视频网站| 可以在线观看的av| 成人免费黄色大片| 成人黄色影片在线| 无码人妻久久一区二区三区不卡| 国产精品久久久乱弄 | 99精品视频免费在线观看| 国产精品久久久久久影视| 日韩精品视频免费看| 亚洲网色网站| 日韩在线视频免费观看高清中文| theav精尽人亡av| 懂色av一区二区| 91精品国产综合久久精品麻豆| 成年人免费大片| 无码小电影在线观看网站免费| 夜夜精品视频一区二区| 自拍偷拍99| av一区在线观看| 国产婷婷色一区二区三区| 精品亚洲欧美日韩| 日韩一级片免费观看| 国产剧情一区二区三区| 成人高h视频在线| 中文字字幕在线观看| 日韩精品三区四区| 免费久久久一本精品久久区| 男女日批视频在线观看| 亚洲成a人v欧美综合天堂麻豆| 波多野结衣一区二区三区| 91精品在线观| 一卡二卡三卡在线| 麻豆精品视频在线观看| 国产精品啪视频| 91视频在线视频| 三级欧美在线一区| 欧美制服第一页| 99超碰在线观看| 天堂一区二区在线免费观看| 日韩av免费在线看| av手机天堂网| 热久久久久久久| 国产玖玖精品视频| 国产美女明星三级做爰| 国产精品一二三四| 成人自拍爱视频| 三级做a全过程在线观看| 久久久天堂av| 亚洲午夜精品福利| 性爱视频在线播放| 亚洲18女电影在线观看| 久久久久狠狠高潮亚洲精品| 国产精品亚洲d| 69av一区二区三区| 中文字幕制服丝袜| 免费一区二区三区视频导航| 最近2019中文字幕mv免费看| av激情在线观看| 欧美aⅴ99久久黑人专区| 久久久久久综合网天天| 手机在线看片1024| 久久97超碰国产精品超碰| 91中文在线视频| 亚洲精品久久久久久动漫器材一区| 国产精品亚洲一区二区三区妖精| 国产在线一区二| 天天干天天摸天天操| 91免费看`日韩一区二区| 蜜桃传媒视频麻豆第一区免费观看| 男女网站在线观看| 国产精品久久久久久妇女6080| 亚洲欧美日韩国产yyy| 成人av黄色| 精品二区三区线观看| wwwxxx黄色片| 国产一区二区| 亚洲高清不卡av| 中文天堂资源在线| 国产一区清纯| 欧美激情中文字幕乱码免费| 6080午夜伦理| 精品一区二区在线视频| 国产精品日本一区二区| 麻豆影视在线| 中文字幕一区二区三区不卡在线| 成人午夜视频免费观看| 在线日韩影院| 欧美一区二区私人影院日本| 六月婷婷七月丁香| 欧美1区免费| 国产成人高清激情视频在线观看| 91精品中文字幕| 国产91综合网| 色一情一乱一伦一区二区三区丨 | 激情婷婷欧美| 欧美又大又粗又长| 99久久精品国产成人一区二区| 99精品热视频| 色乱码一区二区三区熟女| 亚洲性图自拍| 欧美三级欧美一级| 三级男人添奶爽爽爽视频| 国产精品成人a在线观看| 97精品国产97久久久久久| 亚洲一级特黄毛片| 久久综合狠狠综合久久激情| 日韩人妻一区二区三区蜜桃视频| 久久电影网站| 日韩三级视频在线看| 精品无码在线观看| 国产日本精品| 国产91视觉| 黄色在线播放网站| 91久久精品一区二区三区| 爱爱爱爱免费视频| 成人一区二区| 91精品国产精品| 国产精品久久久久毛片| 国产亚洲精久久久久久| 精品无码一区二区三区在线| 久久综合偷偷噜噜噜色| 中文字幕欧美日韩| 国产又大又黄又粗| 久久综合久久99| 国产极品尤物在线| 超碰成人福利| 免费99精品国产自在在线| 一区二区不卡视频在线观看| 国产日韩欧美电影| 欧美又粗又长又爽做受| 欧美理伦片在线播放| 欧美激情国产日韩精品一区18| 一级α片免费看刺激高潮视频| 久久人人爽人人爽| 激情六月丁香婷婷| 婷婷成人影院| 日本精品视频在线观看| 三级毛片在线免费看| 精品福利一区二区| av网站免费在线看| 日本怡春院一区二区| 日本一区二区三区精品视频| 激情开心成人网| 亚洲人av在线影院| 亚洲 日本 欧美 中文幕| av不卡一区二区三区| 免费黄色日本网站| 最新国产精品视频| 国产成人高清激情视频在线观看| 国产在线观看网站| 欧美性猛片xxxx免费看久爱| 成人一级片免费看| 极品少妇xxxx精品少妇| 亚洲区成人777777精品| 亚洲成人黄色| 久久久亚洲福利精品午夜| 人妻无码中文字幕免费视频蜜桃| 午夜精品福利视频网站| 国产xxxx视频| 日韩国产欧美一区二区三区| 秋霞在线一区二区| 91麻豆精品国产91久久久久推荐资源| 欧美另类交人妖| 欧美性受xxxx狂喷水| 欧美午夜激情视频| 欧美巨胸大乳hitomi| 国产呦萝稀缺另类资源| 免费人成自慰网站| 久久不见久久见中文字幕免费| 国产精品久久久久久久电影| 成a人片在线观看| 欧美精品一区二区三区很污很色的 | 国产精品夜夜夜| 宅男一区二区三区| 国产精品调教| 国产成人在线一区| av片在线观看永久免费| 亚洲国产精品推荐| 中文字幕二区三区| 精品日本高清在线播放| av片在线免费看| 大胆亚洲人体视频| 久久精品网站视频| 欧美日韩国产欧| 久久天堂国产精品| 中文字幕一区二区三区中文字幕| 欧美中文在线字幕| 成人看片免费| 国产一区二区av| 国产91久久久| 欧洲av在线精品| 国产精品黄色大片| 亚洲天堂av老司机| 中文幕无线码中文字蜜桃| 国模少妇一区二区三区 | 在线免费高清一区二区三区| 日韩国产伦理| 大伊香蕉精品在线品播放| 国产精品狼人色视频一区| 欧美性猛片xxxxx免费中国| 一区二区三区www| 污污视频在线免费看| 欧美一区二区三级| 艳妇乳肉豪妇荡乳av无码福利| 亚洲福利国产精品| 精品无码一区二区三区蜜臀| 久久久不卡影院| 亚洲狠狠婷婷综合久久久久图片| 国产乱码精品一区二区三区av| 人妻熟女一二三区夜夜爱| 欧美日一区二区在线观看| 一级二级三级欧美| 精品久久久久久久久久久下田| 久久精品人成| 国产精品丝袜在线播放| 91亚洲精华国产精华| 深夜视频一区二区| 欧美中文字幕在线视频| v片在线观看| 九九视频这里只有精品| 麻豆传媒视频在线观看免费| 国产亚洲精品久久| 久久精品蜜桃| 亚洲精品一区久久久久久| 蜜桃视频久久一区免费观看入口| 69成人精品免费视频| 国产一区二区三区中文字幕 | 在线观看毛片av| 日本道色综合久久| 国产成人精品一区二三区| 精品人伦一区二区三区蜜桃网站 | 一区二区三区在线免费| 色哟哟一一国产精品| 国产精品久久久久毛片软件| 亚洲熟女少妇一区二区| 国产精品乱码人人做人人爱| 日本美女xxx| 国产精品毛片无遮挡高清| 在线观看亚洲大片短视频| 国产精品色哟哟| a一级免费视频| 亚洲日本va午夜在线影院| 在线观看黄网址| 亚洲婷婷在线视频| 久久亚洲AV无码| 午夜视黄欧洲亚洲| 91国产丝袜播放在线| 欧美日韩国产丝袜另类| 一区二区三区福利视频| 欧美性生交片4| 国产av无码专区亚洲av| 精品免费国产二区三区 | 成人观看网址| 日本国产精品视频| 精品123区| 国产色视频一区| 美女视频一区| 国产伦视频一区二区三区| 激情亚洲另类图片区小说区| 久久精品ww人人做人人爽| 精品中文字幕一区二区三区av| 日韩视频在线播放| 欧美久久久久| 国产乱子夫妻xx黑人xyx真爽| 日韩国产高清在线| 红桃视频 国产| 国产suv精品一区二区883| 一本加勒比北条麻妃| 国产精品免费av| 欧美爱爱小视频| 欧美性色19p| 99久久精品国产亚洲| 日韩欧美中文一区| 全色精品综合影院| 日韩在线观看免费高清完整版| 青春草在线视频| 国产精品久久久久久久av大片| 另类视频一区二区三区| 精品久久精品久久| 久久精品国产www456c0m| www污在线观看| 噜噜噜在线观看免费视频日韩 | 欧美激情四色| 成人黄色片视频| 黄色精品一二区| 亚洲精品色午夜无码专区日韩| 亚洲特黄一级片| 秋霞精品一区二区三区| 91精品国产免费| 天堂av网在线| 久久99久久99精品中文字幕| 久久精品女人天堂av免费观看 | 一区二区三区久久网| 亚洲高清在线| 91aaa精品| 国产亚洲欧美激情| 日本少妇性高潮| 欧美中文字幕不卡| 亚洲三区在线播放| 欧美肥臀大乳一区二区免费视频| 99热播精品免费| 精品视频第一区| 亚洲国产精品第一区二区| 国内国产精品天干天干| 久久亚洲综合色| 精品无码久久久久| 精品视频一区二区三区免费| 国产一级片在线播放| 97在线看福利| 欧美影院在线| 亚洲成人午夜在线| 久久精品女人| av网站有哪些| 亚洲国产aⅴ成人精品无吗| 国产免费久久久| 超薄丝袜一区二区| 农村妇女一区二区| 视频一区二区在线| 丝袜美腿亚洲一区| 深爱五月激情网| 欧美午夜女人视频在线| 欧美视频一二区| 欧美激情高清视频| 久久久久九九精品影院| 国产一级片91| 国产综合色产在线精品| 国精品人伦一区二区三区蜜桃| 91福利在线看| 91av资源在线| 国产精品亚洲网站| 日韩欧美大片| 亚洲 国产 图片| 伊人色综合久久天天人手人婷| 国产又黄又爽视频| 久久中文精品视频| 精品一区二区三区中文字幕在线| 久久免费一级片| 国产成人综合在线播放| 欧美日韩偷拍视频| 精品日韩在线一区| 国产伦久视频在线观看| 精品福利影视| 蘑菇福利视频一区播放| 亚洲AV无码国产精品| 欧美系列日韩一区| 欧美jizzhd欧美| 91性高湖久久久久久久久_久久99| 欧美/亚洲一区| 亚洲成人av免费在线观看| 日韩欧美亚洲范冰冰与中字| 久久视频www| 国产精品欧美一区二区三区奶水| 中文字幕一区二区三区欧美日韩| 亚洲自拍第三页| 亚洲一区二区三区小说| 欧美一区二区黄片| 国产精品福利观看| 亚洲精品二区三区| 在线xxxxx| 色婷婷精品久久二区二区蜜臀av | 亚洲色图激情小说| 国产香蕉久久| 国产欧美日韩小视频| gogo大胆日本视频一区| 青青青国产在线| 最近中文字幕mv在线一区二区三区四区| 韩国精品视频在线观看 | 欧美bbbbb性bbbbb视频| 欧美三级在线播放| 国内在线免费视频| 亚洲看片网站|