歸併排序(merge sort)體現了分治的思想,即將乙個待排序陣列分為兩部分,對這兩個部分進行歸併排序,排序後,再對兩個已經排序好的陣列進行合併。這種思想可以用遞迴方式很容易實現。歸併排序的時間複雜度為
o(nlogn),空間複雜度為
o(n)。
實現**如下:
#include
#include
"common.h
"void merge(
int data,
int p,
int q,
int r)
else
}
if(i < n1)
if(j < n2)
}void merge_sort(
int data,
int p,
int r)
} 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
介紹 歸併排序是採用分治法的乙個非常典型的應用。歸併排序的思想就是先遞歸分解陣列,再合並陣列。先考慮合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。再考慮遞迴分解,基本思路是將陣列...