Java 歸併排序演算法

2021-09-20 05:54:43 字數 1367 閱讀 5542

歸併排序(merge-sort)是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。

歸併排序

歸併排序演算法穩定,陣列需要o(n)的額外空間,鍊錶需要o(log(n))的額外空間,時間複雜度為o(nlog(n)),演算法不是自適應的,不需要對資料的隨機讀取。

申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列。

設定兩個指標,最初位置分別為兩個已經排序序列的起始位置。

比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置。

重複步驟3直到某一指標達到序列尾。

將另一串行剩下的所有元素直接複製到合併序列尾。

public class mergesorttest ;

// 排序前

system.out.println("排序前:");

for (int a : a)

system.out.println();

// 排序

mergesort(a);

// 排序後

system.out.println("排序後:");

for (int a : a)

system.out.println();

}// 排序入口

public static void mergesort(int a)

//遞迴

public static void sort(int a, int start, int end)

// 將兩個陣列進行歸併,歸併前面2個陣列已有序,歸併後依然有序

public static void merge(int a, int start, int mid, int end) else

}// 剩餘部分依次放入臨時陣列(實際上兩個while只會執行其中乙個)

while (i <= mid)

while (j <= end)

// 將臨時陣列中的內容拷貝回原陣列中 (left-right範圍的內容)

for (int m = 0; m < k; m++) }}

對於演算法,理解原理很重要。。。

配一張圖

github原始碼:

歸併排序演算法 JAVA

歸併排序演算法,先將陣列,遞迴二分,拆分成乙個個有序的陣列,然後合併 descript 歸併排序演算法 author lanjonah 2018年2月28日 param array 需要排序的陣列 return private static int mergesort int array 遞迴分治 ...

java排序演算法 歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divideand conquer 的乙個非常典型的應用。在討論歸併排序演算法之前,先來看乙個小問題,對於兩個有序陣列,如何合併成乙個有序陣列問題。public static voidmerge intaa,intbb else...

排序演算法 歸併排序 (java)

歸併排序,顧名思義,就是將資料進行合併,我們首先將待排陣列分成兩個子串行,然後在對其單個序列進行排序,不斷遞迴到只有兩個元素的子串行,然後再向上返回,最中得到的是兩個有序的子串行,最後我們通過乙個輔助陣列,遍歷這兩個陣列,挑選出較小的元素將其放在輔助陣列中,這樣我們就會在輔助陣列中將數排好序了,然後...