国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

說說你對歸并排序的理解?如何實現?應用場景?

這篇具有很好參考價值的文章主要介紹了說說你對歸并排序的理解?如何實現?應用場景?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

說說你對歸并排序的理解?如何實現?應用場景?

一、是什么

歸并排序(Merge Sort)是建立歸并操作上的一種有效,穩(wěn)定的排序算法,該算法是采用分治法的一個非常典型的應用

將已有序的子序列合并,得到完全有序的序列,即先使每個子序列有序,再使子序列段間有序

例如對于含有?n?個記錄的無序表,首先默認表中每個記錄各為一個有序表(只不過表的長度都為 1)

然后進行兩兩合并,使?n?個有序表變?yōu)?code>n/2?個長度為 2 或者 1 的有序表(例如 4 個小有序表合并為 2 個大的有序表)

通過不斷地進行兩兩合并,直到得到一個長度為?n?的有序表為止

例如對無序表{49,38,65,97,76,13,27}進行歸并排序分成了分、合兩部分:

如下圖所示:

說說你對歸并排序的理解?如何實現?應用場景?

歸并合過程中,每次得到的新的子表本身有序,所以最終得到有序表

上述分成兩部分,則稱為二路歸并,如果分成三個部分則稱為三路歸并,以此類推

二、如何實現

關于歸并排序的算法思路如下:

  • 分:把數組分成兩半,再遞歸對子數組進行分操作,直至到一個個單獨數字

  • 合:把兩個數合成有序數組,再對有序數組進行合并操作,直到全部子數組合成一個完整的數組

    • 合并操作可以新建一個數組,用于存放排序后的數組
    • 比較兩個有序數組的頭部,較小者出隊并且推入到上述新建的數組中
    • 如果兩個數組還有值,則重復上述第二步
    • 如果只有一個數組有值,則將該數組的值出隊并推入到上述新建的數組中

說說你對歸并排序的理解?如何實現?應用場景?

?用代碼表示則如下圖所示:

function mergeSort(arr) {  // 采用自上而下的遞歸方法
    const len = arr.length;
    if(len < 2) {
        return arr;
    }
    let middle = Math.floor(len / 2),
        left = arr.slice(0, middle),
        right = arr.slice(middle);
    return merge(mergeSort(left), mergeSort(right));
}

function merge(left, right)
{
    const result = [];

    while (left.length && right.length) {
        if (left[0] <= right[0]) {
            result.push(left.shift());
        } else {
            result.push(right.shift());
        }
    }

    while (left.length)
        result.push(left.shift());

    while (right.length)
        result.push(right.shift());

    return result;
}

上述歸并分成了分、合兩部分,在處理分過程中遞歸調用兩個分的操作,所花費的時間為2乘T(n/2),合的操作時間復雜度則為O(n),因此可以得到以下公式:

總的執(zhí)行時間 = 2 × 輸入長度為n/2sort函數的執(zhí)行時間 +?merge函數的執(zhí)行時間O(n)

當只有一個元素時,T(1) = O(1)

如果對T(n) = 2 * T(n/2) + O(n)進行左右 / n的操作,得到?T(n) / n = (n / 2) * T(n/2) + O(1)

現在令?S(n) = T(n)/n,則S(1) = O(1),然后利用表達式帶入得到S(n) = S(n/2) + O(1)

所以可以得到:S(n) = S(n/2) + O(1) = S(n/4) + O(2) = S(n/8) + O(3) = S(n/2^k) + O(k) = S(1) + O(logn) = O(logn)

綜上可得,T(n) = n * log(n) = nlogn

關于歸并排序的穩(wěn)定性,在進行合并過程,在1個或2個元素時,1個元素不會交換,2個元素如果大小相等也不會交換,由此可見歸并排序是穩(wěn)定的排序算法

三、應用場景

在外排序中通常使用排序-歸并的策略,外排序是指處理超過內存限度的數據的排序算法,通常將中間結果放在讀寫較慢的外存儲器,如下分成兩個階段:

  • 排序階段:讀入能夠放進內存中的數據量,將其排序輸出到臨時文件,一次進行,將帶排序數據組織為多個有序的臨時文件
  • 歸并階段:將這些臨時文件組合為大的有序文件

例如,使用100m內存對900m的數據進行排序,過程如下:

  • 讀入100m數據內存,用常規(guī)方式排序
  • 將排序后的數據寫入磁盤
  • 重復前兩個步驟,得到9個100m的臨時文件
  • 將100m的內存劃分為10份,將9份為輸入緩沖區(qū),第10份為輸出緩沖區(qū)
  • 進行九路歸并排序,將結果輸出到緩沖區(qū)
    • 若輸出緩沖區(qū)滿,將數據寫到目標文件,清空緩沖區(qū)
    • 若緩沖區(qū)空,讀入相應文件的下一份數據

參考文獻

  • https://baike.baidu.com/item/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F/1639015
  • https://chowdera.com/2021/09/20210920201630258d.html#_127
  • https://juejin.cn/post/6844904007899561998

如果對您有所幫助,歡迎您點個關注,我會定時更新技術文檔,大家一起討論學習,一起進步。

?說說你對歸并排序的理解?如何實現?應用場景?文章來源地址http://www.zghlxwxcb.cn/news/detail-856726.html

到了這里,關于說說你對歸并排序的理解?如何實現?應用場景?的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 說說你對貪心算法、回溯算法的理解?應用場景?

    說說你對貪心算法、回溯算法的理解?應用場景?

    貪心算法,又稱貪婪算法,是算法設計中的一種思想 其期待每一個階段都是局部最優(yōu)的選擇,從而達到全局最優(yōu),但是結果并不一定是最優(yōu)的 舉個零錢兌換的例子,如果你有1元、2元、5元的錢幣數張,用于兌換一定的金額,但是要求兌換的錢幣張數最少 如果現在你要兌換

    2024年04月28日
    瀏覽(31)
  • 說說你對vue的mixin的理解,有什么應用場景?

    說說你對vue的mixin的理解,有什么應用場景?

    Mixin 是面向對象程序設計語言中的類,提供了方法的實現。其他類可以訪問 mixin 類的方法而不必成為其子類 Mixin 類通常作為功能模塊使用,在需要該功能時“混入”,有利于代碼復用又避免了多繼承的復雜 先來看一下官方定義 mixin (混入),提供了一種非常靈活的方式,來

    2024年03月09日
    瀏覽(30)
  • 說說你對slot的理解?slot使用場景有哪些?

    說說你對slot的理解?slot使用場景有哪些?

    定義 在Vue.js中,slot(插槽)是一種用于組件之間內容分發(fā)的機制。它允許你在父組件中編寫子組件的內容,從而增加了組件的靈活性和可重用性。 Slot 藝名插槽,花名“占坑”,我們可以理解為 slot 在組件模板中占好了位置,當使用該組件標簽時候,組件標簽里面的內容就

    2024年02月07日
    瀏覽(23)
  • 說說你對算法中時間復雜度,空間復雜度的理解?如何計算?

    說說你對算法中時間復雜度,空間復雜度的理解?如何計算?

    算法(Algorithm)是指用來操作數據、解決程序問題的一組方法。對于同一個問題,使用不同的算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區(qū)別 衡量不同算法之間的優(yōu)劣主要是通過時間和空間兩個維度去考量: 時間維度:是指執(zhí)行當前算

    2024年04月09日
    瀏覽(25)
  • 說說對WebSocket的理解?應用場景?

    說說對WebSocket的理解?應用場景?

    WebSocket,是一種網絡傳輸協(xié)議,位于 OSI 模型的應用層??稍趩蝹€ TCP 連接上進行全雙工通信,能更好的節(jié)省服務器資源和帶寬并達到實時通迅 客戶端和服務器只需要完成一次握手,兩者之間就可以創(chuàng)建持久性的連接,并進行雙向數據傳輸 從上圖可見, websocket 服務器與客戶

    2024年04月08日
    瀏覽(56)
  • 你對SPA單頁面的理解,它的優(yōu)缺點分別是什么?如何實現SPA應用呢?

    你對SPA單頁面的理解,它的優(yōu)缺點分別是什么?如何實現SPA應用呢?

    SPA(single-page application),翻譯過來就是單頁應用SPA是一種網絡應用程序或網站的模型,它通過動態(tài)重寫當前頁面來與用戶交互,這種方法避免了頁面之間切換打斷用戶體驗在單頁應用中,所有必要的代碼(HTML、JavaScript和CSS)都通過單個頁面的加載而檢索,或者根據需要(通

    2024年02月10日
    瀏覽(20)
  • 說說你對圖的理解?相關操作有哪些?

    說說你對圖的理解?相關操作有哪些?

    在計算機科學中,圖是一種抽象的數據類型,在圖中的數據元素通常稱為結點, V 是所有頂點的集合, E 是所有邊的集合 如果兩個頂點 v , w ,只能由 v 向 w ,而不能由 w 向 v ,那么我們就把這種情況叫做一個從? v ?到? w ?的有向邊。 v 也被稱做初始點, w 也被稱為終點。這

    2024年04月22日
    瀏覽(28)
  • 說說你對數據結構的理解?有哪些?區(qū)別?

    說說你對數據結構的理解?有哪些?區(qū)別?

    數據結構是計算機存儲、組織數據的方式,是指相互之間存在一種或多種特定關系的數據元素的集合 前面講到,一個程序 = 算法 + 數據結構,數據結構是實現算法的基礎,選擇合適的數據結構可以帶來更高的運行或者存儲效率 數據元素相互之間的關系稱為結構,根據數據元

    2024年04月10日
    瀏覽(25)
  • 說說你對集合的理解?常見的操作有哪些?

    說說你對集合的理解?常見的操作有哪些?

    集合(Set),指具有某種特定性質的事物的總體,里面的每一項內容稱作元素 在數學中,我們經常會遇到集合的概念: 有限集合:例如一個班集所有的同學構成的集合 無限集合:例如全體自然數集合 在計算機中集合道理也基本一致,具有三大特性: 確定性:于一個給定的

    2024年04月16日
    瀏覽(21)
  • 說說你對樹的理解?相關的操作有哪些?

    說說你對樹的理解?相關的操作有哪些?

    在計算機領域,樹形數據結構是一類重要的非線性數據結構,可以表示數據之間一對多的關系。以樹與二叉樹最為常用,直觀看來,樹是以分支關系定義的層次結構 二叉樹滿足以下兩個條件: 本身是有序樹 樹中包含的各個結點的不能超過 2,即只能是 0、1 或者 2 如下圖,左

    2024年04月17日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包