歸併排序(Merge Sort)

2021-08-19 18:32:36 字數 1058 閱讀 4945

5.歸併排序(merge sort)

和選擇排序一樣,歸併排序的效能不受輸入資料的影響,但表現比選擇排序好的多,因為始終都是o(n log n)的時間複雜度。代價是需要額外的記憶體空間。

(1)演算法簡介

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

(2)演算法描述和實現:具體演算法描述如下:

<1>.把長度為n的輸入序列分成兩個長度為n/2的子串行;

<2>.對這兩個子串行分別採用歸併排序;

<3>.將兩個排序好的子串行合併成乙個最終的排序序列

(3)演算法分析;最佳情況:t(n) = o(n);最差情況:t(n) = o(nlogn);平均情況:t(n) = o(nlogn)

#include

#include

// 合併兩個已排好序的陣列

void merge(int a, int left, int mid, int right)

while (i <= mid)

while (j <= right)

for (int k = 0; k < len; k++)

}// 遞迴實現的歸併排序

void mergesort(int a, int left, int right)  

int main() ;

int n = sizeof(a) / sizeof(int);

mergesort(a, 0, n - 1);

printf("排序好的陣列為:

");for (int k = 0; k < n; ++k)

printf("%d ", a[k]);

printf("\n");

return 0;

}

歸併排序 Merge sort

merge the a s.m and a m 1.t to r s.t template void two merge typet a,typet r,int s,int m,int t while i m r k a i while j t r k a j merge the a 0.n 1 s...

歸併排序(merge sort)

歸併排序 歸併排序是一種遞迴排序演算法,無論陣列元素的原始順序如何,其效能恆定不變。將陣列一分為二,分別排序兩部分元素,再將有序的兩半陣列歸併為乙個有序陣列。歸併步驟比較陣列前一半的元素與陣列的後一半元素,並將較小元素移到臨時陣列,該過程繼續前進,直到其中一半再沒有元素為止。此後只需將其餘元素移到臨...

歸併排序 Merge Sort

歸併排序 merge sort 是利用 歸併 技術來進行排序。歸併是指將若干個已排序的子檔案合併成乙個有序的檔案。兩路歸併演算法 1 演算法基本思路 設兩個有序的子檔案 相當於輸入堆 放在同一向量中相鄰的位置上 r low.m r m 1.high 先將它們合併到乙個區域性的暫存向量r1 相當於輸出...