溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中如何實現歸并排序

發布時間:2021-08-12 14:38:50 來源:億速云 閱讀:222 作者:Leah 欄目:大數據

Java中如何實現歸并排序,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。


歸并排序(MERGE-SORT)是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法(Divide and Conquer)的一個非常典型的應用。將已有序的子序列合并,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合并成一個有序表,稱為二路歸并。

歸并過程

        比較a[i]和b[j]的大小,若a[i]≤b[j],則將第一個有序表中的元素a[i]復制到r[k]中,并令i和k分別加上1;否則將第二個有序表中的元素b[j]復制到r[k]中,并令j和k分別加上1,如此循環下去,直到其中一個有序表取完,然后再將另一個有序表中剩余的元素復制到r中從下標k到下標t的單元。歸并排序的算法我們通常用遞歸實現,先把待排序區間[s,t]以中點二分,接著把左邊子區間排序,再把右邊子區間排序,最后把左區間和右區間用一次歸并操作合并成有序的區間[s,t]。

歸并操作


歸并操作(merge),也叫歸并算法,指的是將兩個順序序列合并成一個順序序列的方法。如 設有數列{6,202,100,301,38,8,1}


初始狀態:6,202,100,301,38,8,1


第一次歸并后:{6,202},{100,301},{8,38},{1},比較次數:3;


第二次歸并后:{6,100,202,301},{1,8,38},比較次數:4;


第三次歸并后:{1,6,8,38,100,202,301},比較次數:4;


總的比較次數為:3+4+4=11,;


逆序數為14;

算法描述

歸并操作的工作原理如下:

第一步:申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合并后的序列


第二步:設定兩個指針,最初位置分別為兩個已經排序序列的起始位置


第三步:比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置


重復步驟3直到某一指針超出序列尾


將另一序列剩下的所有元素直接復制到合并序列尾


比較

        歸并排序是穩定的排序。即相等的元素的順序不會改變。如輸入記錄 1(1) 3(2) 2(3) 2(4) 5(5) (括號中是記錄的關鍵字)時輸出的 1(1) 2(3) 2(4) 3(2) 5(5) 中的2 和 2 是按輸入的順序。這對要排序數據包含多個信息而要按其中的某一個信息排序,要求其它信息盡量按輸入的順序排列時很重要。這也是它比快速排序優勢的地方。

示例代碼

歸并排序原理


歸并排序具體工作原理如下(假設序列共有n個元素):


將序列每相鄰兩個數字進行歸并操作(merge),形成floor(n/2)個序列,排序后每個序列包含兩個元素


將上述序列再次歸并,形成floor(n/4)個序列,每個序列包含四個元素

重復步驟2,直到所有元素排序完畢


示例代碼:

Java中如何實現歸并排序

   Java中如何實現歸并排序


Java中如何實現歸并排序

關于Java中如何實現歸并排序問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女