歸併排序MergeSort演算法 分治

2022-07-31 11:21:13 字數 1064 閱讀 4896

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

歸併過程為:比較a[i]和a[j]的大小,若a[i]≤a[j],則將第乙個有序表中的元素a[i]複製到r[k]中,並令i和k分別加上1;否則將第二個有序表中的元素a[j]複製到r[k]中,並令j和k分別加上1,如此迴圈下去,直到其中乙個有序表取完,然後再將另乙個有序表中剩餘的元素複製到r中從下標k到下標t的單元。歸併排序的演算法我們通常用遞迴實現,先把待排序區間[s,t]以中點二分,接著把左邊子區間排序,再把右邊子區間排序,最後把左區間和右區間用一次歸併操作合併成有序的區間[s,t]。

歸併排序速度僅次於快速排序(但快速排序處理整體已經非常有序的陣列時速度不如歸併排序),為穩定排序演算法,一般用於對總體無序,但是各子項相對有序的陣列。

mergesort用分治法對n個元素進行排序,用分、治、合三部分完成排序。t(n)=2t(n/2)+o(n)。時間複雜度為o(nlgn)

歸併排序演算法 MergeSort

按著演算法導論的講解,自己去嘗試編這個程式,主體其實早好了,全敗在細節上。於是乎改了又改,就是不知道自己的錯在哪兒,後來又網搜另外一下其他人的程式,發現竟沒找到和我一樣方法的程式,最後只能試著自己改,最後總算執行了。執行最壞情況時間代價為nlgn.另外此為輸入10數字排序。include inclu...

排序演算法 歸併排序(MergeSort)

歸併排序的特點 遞迴的應用 需要準確並深入的理解遞迴的思想 include include define num 8 using namespace std void msort int a,int tmpa,int left,int right int mergesort int a,int n ...

排序演算法 歸併排序 MergeSort

介紹 歸併排序是採用分治法的乙個非常典型的應用。歸併排序的思想就是先遞歸分解陣列,再合並陣列。先考慮合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。再考慮遞迴分解,基本思路是將陣列...