歸并排序(Merge Sort)是一種高效且穩定的排序算法,其優雅的分治策略使它成為排序領域的一顆明珠。它的核心思想是將一個未排序的數組分割成兩個子數組,然后遞歸地對子數組進行排序,最后將這些排好序的子數組合并起來。
歸并排序是一種分治策略的排序算法,它的核心思想是將數組分成兩個子數組,遞歸地對子數組進行排序,然后將排序好的子數組合并起來,最終得到有序的數組。歸并排序的關鍵步驟包括:
圖片
mergesort.png
歸并排序在性能方面有以下特點:
以下是使用 Java 實現歸并排序的示例代碼:
public class Test { public static void main(String[] args) { int[] arr = new int[]{7,5,2,3,6,4}; System.out.println("原始數組:"+ Arrays.toString(arr)); mergeSort(arr); System.out.println("排序后的數組:"+ Arrays.toString(arr)); } // 歸并排序的入口方法 public static void mergeSort(int[] arr) { // 針對特殊情況,數組為空或只有一個元素時,無需排序 if(arr == null || arr.length <= 1 ){ return; } // 創建一個臨時數組用于歸并操作 int[] temp = new int[arr.length]; // 調用實際的排序方法,傳入數組、左邊界、右邊界和臨時數組 sort(arr, 0, arr.length - 1, temp); } // 歸并排序的核心排序方法(遞歸調用的方法) public static void sort(int[] arr,int left,int right,int[] temp) { //遞歸終止的條件 if(left < right){ //計算中間位置分割的下標 int mid = (right + left) / 2; // 遞歸對左半部分進行排序 sort(arr, left, mid, temp); // 遞歸對右半部分進行排序 sort(arr, mid+1, right, temp); //合并 merge(arr,left,mid,right,temp); } } // 歸并排序的核心歸并方法 public static void merge(int[] arr, int left, int mid, int right, int[] temp) { int i = left; int j = mid + 1; int k = left; // 比較左右兩部分的元素,并將較小的元素放入臨時數組 while (i <= mid && j <= right) { if (arr[i] <= arr[j]) { temp[k++] = arr[i++]; } else { temp[k++] = arr[j++]; } } //如果右邊元素先放完,則將左邊剩余的元素逐個放入臨時數組中 while (i <= mid) { temp[k++] = arr[i++]; } //如果左邊元素先放完,則將右邊剩余的元素逐個放入臨時數組中 while (j <= right) { temp[k++] = arr[j++]; } // 將臨時數組的結果復制回原數組 for (int l = left; l <= right; l++) { arr[l] = temp[l]; } }}
輸出結果:
原始數組:[7, 5, 2, 3, 6, 4]排序后的數組:[2, 3, 4, 5, 6, 7]
這段代碼演示了如何使用 Java 實現歸并排序算法。它通過遞歸將數組分割為子數組,然后合并這些子數組,最終得到排序完成的數組。
總之,歸并排序是一種高效、穩定的排序算法,適用于各種規模和類型的數據。雖然它的空間復雜度較高,但在實際應用中,它的性能通常非常出色。這使得它成為排序算法家族中的重要一員。
本文鏈接:http://www.tebozhan.com/showinfo-26-12751-0.html深入了解歸并排序:原理、性能分析與 Java 實現
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 聊聊C#歸并排序算法