歸併排序 merge sort 演算法實現

2021-09-05 18:59:57 字數 823 閱讀 4414

歸併排序(merge sort)體現了分治的思想,即將乙個待排序陣列分為兩部分,對這兩個部分進行歸併排序,排序後,再對兩個已經排序好的陣列進行合併。這種思想可以用遞迴方式很容易實現。歸併排序的時間複雜度為

o(nlogn),空間複雜度為

o(n)。

實現**如下:

#include 

<

stdio.h

>

#include 

"common.h

"void

merge(

intdata, 

intp, 

intq, 

intr) 

else }

if(i 

<

n1)     

if(j 

<

n2)       }

void

merge_sort(

intdata, 

intp, 

intr)  } 

void

test_merge_sort() 

;     

printf(

"-------------------------------merge sort----------------------------\n

");    

out_int_array(data, 

7);     

merge_sort(data, 0, 

6);     

out_int_array(data, 

7); 

} int

main()   

歸併排序演算法 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

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