歸併排序(Merge Sort)

2021-08-04 21:38:49 字數 913 閱讀 6232

歸併排序是基於歸併操作的一種穩定排序演算法,並且也是分治思想的乙個典型的應用。在穩定的排序過程下,它可以達到o(n * log(n))的時間複雜度,但是該演算法需要依賴乙個o(n)的輔助排序空間。

歸併排序演算法的主要思想為,給出排序區間,將區間等分為兩份,並且分別對兩個區間進行排序,待兩個區間排序完畢,使用o(n)的貪心的方法合併這兩個有序區間。其中劃分的過程最多占用o(log(n))的時間複雜度,每次劃分均需要進行一次合併,即達到上述o(n * log(n))的時間複雜度。歸併過程也可以稱為二路歸併。

通過上面對於演算法的表述,可以看出排序可以非常簡單的使用乙個遞迴來實現,下面給出其**。

void mergesort(int *arr, int *temp, const int &start, const int &end) 

}

通過在合理區間內不斷的劃分,使得目標區間越來越小,在o(log(n))的時間內對目標序列進行劃分,然後對所得兩區間進行o(n)的合併操作。最終合併為乙個完整的有序序列。

下面給出合併**。

void merge(int *arr, int *temp, const

int &start, const

int &mid, const

int &end)

int i = start;

int j = mid + 1;

int k = start;

while (i < mid + 1 && j < end + 1)

while (i < mid + 1) arr[k++] = temp[i++];

while (j < end + 1) arr[k++] = temp[j++];

}

如有不對敬請指出,感謝閱讀!

歸併排序 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 相當於輸出...