Java 中的歸併排序程式是使用最廣泛、最高效的演算法之一。合併排序基於分而治之技術,涉及將給定問題劃分為多個子問題並獨立解決每個子問題。當子問題解決後,我們將它們的結果結合起來得到問題的最終解決方案。合併排序演算法可以使用遞歸來實現,因為它涉及子問題而不是主要問題。
讓我們考慮一個需要使用合併排序演算法進行排序的未排序數組。以下是將包含值 18、8、4、13、10、12、7 和 11 的陣列進行排序所涉及的步驟:
開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
下面是一個程式碼範例,展示了 java 中合併排序的實作:
代碼:
package com.edubca.sorting; public class MergeSort { private int[] array; private int[] tempMergedArr; private int length; public static void main(String a[]){ int[] inputArr = {18, 8, 4, 13, 10, 12, 7, 11}; MergeSort mergeSort = new MergeSort(); mergeSort.sort(inputArr); for(int i:inputArr){ System.out.print(i + " "); } } public void sort(int inputArr[]) { this.array = inputArr; this.length = inputArr.length; this.tempMergedArr = new int[length]; performMergeSort(0, length - 1); } private void performMergeSort(int lowerIndex, int higherIndex) { if (lowerIndex < higherIndex) { int middle = lowerIndex + (higherIndex - lowerIndex) / 2; // Sort the left side of the array call performMergeSort recursively performMergeSort(lowerIndex, middle); // Sort the right side of the array call performMergeSort recursively performMergeSort(middle + 1, higherIndex); // Merge subparts using a temporary array mergeData(lowerIndex, middle, higherIndex); } } private void mergeData (int lowerIndex, int middle, int higherIndex) { for (int i = lowerIndex; i <= higherIndex; i++) { tempMergedArr[i] = array[i]; } int i = lowerIndex; int j = middle + 1; int k = lowerIndex; while (i <= middle && j <= higherIndex) { if (tempMergedArr[i] <= tempMergedArr[j]) { array[k] = tempMergedArr[i]; i++; } else { array[k] = tempMergedArr[j]; j++; } k++; } while (i <= middle) { array[k] = tempMergedArr[i]; k++; i++; } } }
上面的程式碼將產生一個排序數組作為輸出。
輸出:
歸併排序可以用在以下場景:
以下幾點分析歸併排序的複雜度:
以下幾點將合併排序與其他演算法進行比較:
文章的結論是,合併排序是演算法中需要理解的重要概念。
以上是Java 中的歸併排序程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!