合併排序:綜合指引
合併排序是一種高效的排序演算法,經常在各種程式語言中使用,無論是獨立的還是作為混合方法的一部分。 它的基礎在於分而治之的典範:一個問題被分解成更小的子問題,單獨解決,然後將它們的解決方案組合起來得到最終結果。 合併排序遞歸地將輸入清單分成兩半,對每一半進行排序,然後合併已排序的兩半以產生完全排序的清單。
理解合併排序過程
讓我們使用範例陣列來說明合併排序過程:
此圖描繪了陣列的遞歸劃分。
此圖顯示了排序子陣列的合併。
實現合併排序
以下是歸併排序演算法的 Java 實作:
import java.util.Arrays; public class MergeSortTest { public static void main(String[] args){ int[] arr = {8, 2, 6, 4, 9, 1}; System.out.println("Unsorted array: " + Arrays.toString(arr)); mergeSort(arr, 0, arr.length-1); System.out.println("Sorted array: " + Arrays.toString(arr)); } static void mergeSort(int arr[], int start, int end){ if (start < end){ int mid = (start + end) / 2; mergeSort(arr, start, mid); mergeSort(arr, mid + 1, end); merge(arr, start, mid, end); } } static void merge(int arr[], int start, int mid, int end){ int[] left = new int[(mid - start) + 1]; int[] right = new int[end - mid]; for(int i = 0; i <= mid - start; i++) left[i] = arr[start + i]; for(int j = 0; j < end - mid; j++) right[j] = arr[mid + 1 + j]; int i = 0, j = 0; int k = start; while (i < left.length && j < right.length){ if(left[i] <= right[j]){ arr[k] = left[i]; i++; } else{ arr[k] = right[j]; j++; } k++; } while (i < left.length){ arr[k] = left[i]; i++; k++; } while (j < right.length){ arr[k] = right[j]; j++; k++; } } }
代碼說明
mergeSort
方法遞歸地分割數組,直到子數組只包含一個元素。 merge
方法至關重要;它會取得已排序的子陣列並將它們有效地合併為單一已排序的陣列。 合併過程涉及比較兩個子數組中的元素並將較小的元素放入主數組中。
此圖說明了合併步驟。
程式碼的輸出是:
未排序數組:[8,2,6,4,9,1] 排序數組:[1, 2, 4, 6, 8, 9]
演算法複雜度
- 時間複雜度: 在所有情況下(最佳、平均和最差)O(n log n)。這是因為無論輸入數組的初始順序如何,分而治之的方法都保持一致。
- 空間複雜度: O(n),因為合併作業期間臨時陣列需要額外的空間。
以上是了解歸併排序演算法(附Java範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器