日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

TypeScript實(shí)現(xiàn)十大排序算法之歸并排序示例詳解

瀏覽:222日期:2022-06-01 13:49:36
目錄
  • 一. 歸并排序的定義
  • 二. 歸并排序的流程
  • 三. 歸并排序的圖解
  • 四. 歸并排序的代碼
  • 五. 歸并排序的時(shí)間復(fù)雜度
  • 六. 歸并排序的總結(jié)

一. 歸并排序的定義

歸并排序(merge sort)是一種常見的排序算法:

  • 它的基本思想是將待排序數(shù)組分成若干個(gè)子數(shù)組。
  • 然后將相鄰的子數(shù)組歸并成一個(gè)有序數(shù)組。
  • 最后再將這些有序數(shù)組歸并(merge)成一個(gè)整體有序的數(shù)組。

這個(gè)算法最早出現(xiàn)在1945年,由約翰·馮·諾伊曼(John von Neumann)(又一個(gè)天才,現(xiàn)代計(jì)算機(jī)之父,馮·諾依曼結(jié)構(gòu)、普林斯頓結(jié)構(gòu))首次提出。

  • 當(dāng)時(shí)他在為美國政 府工作,研究原子彈的問題。
  • 由于當(dāng)時(shí)計(jì)算機(jī),他在研究中提出了一種高效計(jì)算的方法,這個(gè)方法就是歸并排序。

歸并排序的基本思路是先將待排序數(shù)組遞歸地拆分成兩個(gè)子數(shù)組,然后對(duì)每個(gè)子數(shù)組進(jìn)行排序,最后將兩個(gè)有序子數(shù)組合并成一個(gè)有序數(shù)組。

  • 在實(shí)現(xiàn)中,我們可以使用“分治法”來完成這個(gè)過程,即將大問題分解成小問題來解決。

歸并排序的算法復(fù)雜度為 O(nlogn),是一種比較高效的排序算法,因此在實(shí)際應(yīng)用中被廣泛使用。

雖然歸并排序看起來比較復(fù)雜,但是只要理解了基本思路,實(shí)現(xiàn)起來并不困難,而且它還是一個(gè)非常有趣的算法。

二. 歸并排序的流程

歸并排序是一種基于分治思想的排序算法,其基本思路可以分為三個(gè)步驟:

步驟一:分解(Divide):歸并排序使用遞歸算法來實(shí)現(xiàn)分解過程,具體實(shí)現(xiàn)中可以分為以下幾個(gè)步驟:

  • 如果待排序數(shù)組長度為1,認(rèn)為這個(gè)數(shù)組已經(jīng)有序,直接返回;
  • 將待排序數(shù)組分成兩個(gè)長度相等的子數(shù)組,分別對(duì)這兩個(gè)子數(shù)組進(jìn)行遞歸排序;
  • 將兩個(gè)排好序的子數(shù)組合并成一個(gè)有序數(shù)組,返回這個(gè)有序數(shù)組。

步驟二:合并(Merge):合并過程中,需要比較每個(gè)子數(shù)組的元素并將它們有序地合并成一個(gè)新的數(shù)組:

  • 可以使用兩個(gè)指針 i 和 j 分別指向兩個(gè)子數(shù)組的開頭,比較它們的元素大小,并將小的元素插入到新的有序數(shù)組中。
  • 如果其中一個(gè)子數(shù)組已經(jīng)遍歷完,就將另一個(gè)子數(shù)組的剩余部分直接插入到新的有序數(shù)組中。
  • 最后返回這個(gè)有序數(shù)組。

步驟三:歸并排序的遞歸終止條件:

  • 歸并排序使用遞歸算法來實(shí)現(xiàn)分解過程,當(dāng)子數(shù)組的長度為1時(shí),認(rèn)為這個(gè)子數(shù)組已經(jīng)有序,遞歸結(jié)束。

總體來看,歸并排序的基本思路是分治法,分成子問題分別解決,然后將子問題的解合并成整體的解。

三. 歸并排序的圖解

四. 歸并排序的代碼

下面是TypeScript實(shí)現(xiàn)的歸并排序代碼,帶有詳細(xì)的注釋:

// 定義函數(shù)mergeSort,參數(shù)是待排序數(shù)組arrfunction mergeSort(arr: number[]): number[] {    // 計(jì)算數(shù)組長度    const n = arr.length;    // 如果數(shù)組長度小于等于1,則直接返回該數(shù)組    if (n <= 1) {return arr;    }    // 計(jì)算中間位置    const middle = Math.floor(n / 2);    // 對(duì)左邊的數(shù)組進(jìn)行歸并排序    const left = mergeSort(arr.slice(0, middle));    // 對(duì)右邊的數(shù)組進(jìn)行歸并排序    const right = mergeSort(arr.slice(middle));    // 合并兩個(gè)排好序的數(shù)組    return merge(left, right);}// 定義函數(shù)merge,參數(shù)是兩個(gè)排好序的數(shù)組left和rightfunction merge(left: number[], right: number[]): number[] {    // 定義指針變量,分別指向兩個(gè)數(shù)組的開頭    let i = 0, j = 0;    // 定義一個(gè)空數(shù)組,用來存放合并后的數(shù)組    const result = [];    // 比較兩個(gè)數(shù)組的第一個(gè)元素,將較小的放入result數(shù)組    while (i < left.length && j < right.length) {if (left[i] < right[j]) {    result.push(left[i++]);} else {    result.push(right[j++]);}    }    // 將沒有比較完的剩余元素放入result數(shù)組    while (i < left.length) {result.push(left[i++]);    }    while (j < right.length) {result.push(right[j++]);    }    // 返回合并后的數(shù)組    return result;}// 測試數(shù)據(jù)const testArr = [5, 2, 9, 1, 5, 6];// 調(diào)用插入排序函數(shù)const sortedArr = mergeSort(testArr);// 打印結(jié)果console.log(sortedArr);

代碼執(zhí)行的過程:

  • mergeSort 函數(shù)實(shí)現(xiàn)歸并排序的遞歸調(diào)用,在該函數(shù)內(nèi),如果數(shù)組的長度小于等于1,直接返回該數(shù)組。
  • 如果數(shù)組的長度大于1,那么執(zhí)行以下代碼:
    • 先計(jì)算數(shù)組的中點(diǎn),并將數(shù)組分為左右兩半。
    • 遞歸調(diào)用左邊和右邊的數(shù)組,最終得到兩個(gè)有序的數(shù)組。
  • merge 函數(shù)實(shí)現(xiàn)將兩個(gè)有序的數(shù)組合并為一個(gè)有序的數(shù)組。

五. 歸并排序的時(shí)間復(fù)雜度

復(fù)雜度的分析過程:

  • 假設(shè)數(shù)組長度為 n,需要進(jìn)行 logn 次歸并操作;
  • 每次歸并操作需要 O(n) 的時(shí)間復(fù)雜度;
  • 因此,歸并排序的時(shí)間復(fù)雜度為 O(nlogn)。

最好情況: O(log n)

  • 最好情況下,待排序數(shù)組已經(jīng)是有序的了,那么每個(gè)子數(shù)組都只需要合并一次,即只需要進(jìn)行一次歸并操作。
  • 因此,此時(shí)的時(shí)間復(fù)雜度是 O(log n)。

最壞情況: O(nlogn)

最壞情況下,待排序數(shù)組是逆序的,那么每個(gè)子數(shù)組都需要進(jìn)行多次合并。

因此,此時(shí)的時(shí)間復(fù)雜度為 O(nlogn)。

平均情況: O(nlogn)

  • 在平均情況下,我們假設(shè)待排序數(shù)組中任意兩個(gè)元素都是等概率出現(xiàn)的。
  • 此時(shí),可以證明歸并排序的時(shí)間復(fù)雜度為 O(nlogn)。

六. 歸并排序的總結(jié)

歸并排序是一種分治策略的排序算法,是利用分治的思想將一個(gè)大問題分成小問題,并在適當(dāng)?shù)牡胤胶喜⑺鼈円越鉀Q該問題的方法。

它是一種穩(wěn)定的排序算法,時(shí)間復(fù)雜度為O(nlogn)。

歸并排序使用了額外的空間,因此更適合處理大數(shù)據(jù)。

  • 歸并排序的基本流程是通過遞歸將數(shù)組分成兩半,分別進(jìn)行遞歸排序,最終再進(jìn)行合并。
  • 具體來說,將數(shù)組的中間元素作為分界點(diǎn),分別對(duì)左右兩邊的數(shù)組進(jìn)行排序,并在排序完成后進(jìn)行合并。

歸并排序的代碼實(shí)現(xiàn)較為簡單,但要注意關(guān)于遞歸函數(shù)和合并函數(shù)的實(shí)現(xiàn)。

歸并排序是一種不需要過多研究的算法,適合于所有的排序場景。

以上就是TypeScript實(shí)現(xiàn)十大排序算法之歸并排序示例詳解的詳細(xì)內(nèi)容,更多關(guān)于TypeScript算法歸并排序的資料請(qǐng)關(guān)注其它相關(guān)文章!

標(biāo)簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
97久久超碰| 亚洲综合中文| 欧美激情日韩| 国产精品1区| 国产精品一区三区在线观看| 欧美视频久久| 国产精品久久久久久久免费软件| 国产欧美日韩精品一区二区三区| 欧美亚洲专区| 日韩黄色在线观看| 国产亚洲欧美日韩精品一区二区三区 | 日韩一区二区三区在线看| 亚洲韩日在线| 午夜久久福利| 视频一区视频二区中文| 色综合视频一区二区三区日韩| 日韩精品社区| 欧美亚洲tv| 国产一区一一区高清不卡| 亚洲黄色网址| 欧美成人综合| 日韩国产欧美在线视频| 欧美激情福利| 92国产精品| av不卡免费看| 亚洲v天堂v手机在线| 国产精品www994| 日韩免费视频| 国产亚洲网站| 国产探花一区在线观看| 成人三级高清视频在线看| 欧美99久久| 中文字幕日韩欧美精品高清在线| 国产伦乱精品| a天堂资源在线| 免费日韩一区二区| 国产日韩中文在线中文字幕| www.九色在线| 亚洲一区二区日韩| 老司机免费视频一区二区| 日本午夜大片a在线观看| 婷婷综合社区| 国产视频一区二区在线播放| 九九精品调教| 日本不卡一二三区黄网| 精品久久91| 一区在线免费| 日本午夜精品久久久久| 天堂av在线| 久久亚洲风情| 国内不卡的一区二区三区中文字幕 | 中文一区一区三区免费在线观| 日本欧美在线| 久久久久国产精品一区二区| 蜜臀91精品国产高清在线观看| 亚洲精品日本| 久久久久久夜| 久久国产99| 久久精品亚洲一区二区| 免费久久久久久久久| 婷婷亚洲成人| 欧美精品高清| 日本欧美韩国一区三区| 日韩精品dvd| 日韩欧美美女在线观看| 91精品韩国| 国产日产精品一区二区三区四区的观看方式| 日韩一区二区三区免费| 久久精品99久久久| 最新国产拍偷乱拍精品| 久久精品国产99国产精品| 在线视频免费在线观看一区二区| 精品日产乱码久久久久久仙踪林| 国产日韩综合| 天堂av在线| 欧美午夜三级| 午夜国产一区二区| 97精品视频在线看| 欧美午夜网站| 亚洲一区二区日韩| 国产综合精品一区| 国产精品115| 蜜臀91精品一区二区三区| 精品国产免费人成网站| 国产欧美三级| 亚洲精一区二区三区| 91精品99| 少妇久久久久| 欧美国产精品| 91成人精品在线| 亚洲永久字幕| 麻豆国产91在线播放| 日韩中文字幕视频网| 好吊日精品视频| 日韩成人高清| 国精品产品一区| 国产福利资源一区| 日本精品国产| 蜜桃视频免费观看一区| 天堂网在线观看国产精品| 高清av一区| 久久中文精品| 日韩精品成人| 一区二区国产在线观看| 免费不卡中文字幕在线| 91欧美在线| 国产精品日韩精品在线播放| 日韩专区欧美专区| 亚洲午夜视频| 精品亚洲美女网站| а√在线中文在线新版| 精品丝袜久久| 国产成人精选| 精品亚洲a∨一区二区三区18| 国产九一精品| 91精品国产自产精品男人的天堂| 中文字幕日本一区二区| 久久成人一区| 蜜臀a∨国产成人精品| 国产精品日韩| 中文国产一区| 波多野结衣一区| 欧美99久久| 欧美日韩高清| 国产午夜久久| 久久福利精品| 日本中文字幕一区二区视频| 日韩不卡手机在线v区| 欧美亚洲福利| 免费一区二区三区在线视频| 韩国女主播一区二区三区| 成人国产综合| 日韩精品首页| 国产一区二区高清| 亚洲综合小说| 国产三级精品三级在线观看国产| 日本不卡中文字幕| 国产精品入口久久| 国产a久久精品一区二区三区| 欧洲精品一区二区三区| 久久中文视频| 蜜桃av一区二区三区电影| 日韩**一区毛片| 欧美精品1区| av亚洲一区二区三区| 国产精品7m凸凹视频分类| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩精品五月天| 麻豆精品在线| 日本精品在线中文字幕| 国产一级一区二区| 亚洲精品动态| 精品久久久中文字幕| 欧美+日本+国产+在线a∨观看| 鲁大师影院一区二区三区| 日韩精品一区二区三区中文字幕| 国产精品xxx在线观看| 日韩精品dvd| 日韩在线播放一区二区| 国产精品极品| 亚洲国产专区| 亚洲久久在线| 精品久久一区| 99视频精品免费观看| 欧美精品观看| 久久久蜜桃一区二区人| 亚洲一区二区免费看| 国产亚洲欧美日韩在线观看一区二区 | 国产精品白丝久久av网站| 波多视频一区| 免费人成黄页网站在线一区二区| 国产亚洲一区二区三区啪| 福利精品一区| 噜噜噜躁狠狠躁狠狠精品视频| 国产精品一线天粉嫩av| 偷拍精品精品一区二区三区| 亚洲专区视频| 色一区二区三区| 色婷婷成人网| 91精品国产福利在线观看麻豆| 午夜精品福利影院| 中文字幕在线免费观看视频| 免费看日韩精品| 97精品国产一区二区三区| 一级欧美视频| 久久久精品午夜少妇| 91麻豆精品| 免费视频亚洲| 久久av超碰| 久久电影一区| 精品入口麻豆88视频| 在线综合亚洲| 成人国产精选| 日韩激情av在线| 免费av一区二区三区四区| 欧美国产视频| 亚洲久久一区| 欧美+亚洲+精品+三区| 国产精品a级| 丝袜诱惑制服诱惑色一区在线观看 |