歸併排序演算法圖解及程式碼實現

演算法介紹

歸併排序演算法是利用歸併的思想實現的排序方法,是一種穩定的排序方法。

歸併排序演算法採用經典的分治策略。分治法分成分的階段與治的階段,分的階段將一個大的問題分解成一個個小的問題然後遞迴求解,而治的階段則將分的階段得到的各結果合併在一起,即分而治之。

演算法描述

將長度為n的輸入序列分成兩個長度為n/2的子序列;

對這兩個子序列分別採用歸併排序;

將兩個排序好的子序列合併成一個最終的有序序列。

排序過程圖解

我們透過一個具體的陣列,來圖解其分(分解)與治(合併)的過程。

原始陣列為:[8,4,5,7,1,3,6,2]

歸併排序演算法圖解及程式碼實現

程式碼實現

package com。lege。sort;import java。util。Arrays;public class MergeSort { public static void main(String[] args) { int[] arr = new int[] { 8, 4, 5, 7, 1, 3, 6, 2 }; System。out。println(Arrays。toString(sort(arr))); } public static int[] sort(int[] arr) { if (arr。length < 2) { return arr; } int mid = arr。length / 2; int[] left = Arrays。copyOfRange(arr, 0, mid); int[] right = Arrays。copyOfRange(arr, mid, arr。length); return merge(sort(left), sort(right)); } public static int[] merge(int[] left, int[] right) { int[] result = new int[left。length + right。length]; int i = 0; int j = 0; int index = 0; while (i < left。length && j < right。length) { if (left[i] <= right[j]) { result[index++] = left[i++]; } else { result[index++] = right[j++]; } } while (i < left。length) { result[index++] = left[i++]; } while (j < right。length) { result[index++] = right[j++]; } return result; }}

列印結果為:

[1, 2, 3, 4, 5, 6, 7, 8]

結尾

感謝大家的支援,歡迎關注同名微信公眾號“

樂哥講Java

”,更多精彩內容等著您!