歸併排序的核心其實算是合併兩個有序的陣列,我之前一直是用的判空實現的,即判斷兩個陣列誰先空並且把另外乙個剩下的接上去,但是這樣在處理邊界和結束條件的時候總感覺有些困難,然後昨天在演算法導論上看到了使用哨兵來進行合併操作,覺得思路很棒,就來實現一下了。
#include#includeusing namespace std;
void mymerge(int a, int p, int q, int r)
else }}
void mergesort(int a, int low, int high)
}int main() ;
int b = ;
mymerge(b, 0, 3, 6); //檢驗合併函式
for (int i = 0; i < 7; i++)
cout << b[i] <<" ";
cout << endl;
mergesort(a, 0, 6); //檢驗歸併排序函式
for (int i = 0; i < 7; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
歸併排序遞迴實現
include include define length 10 using namespace std void merge int ar,int br,int start,int mid,int end else if i mid else void copy int ar,int br,int...
歸併排序(遞迴實現)
演算法思想 1 歸併排序是利用遞迴與分治技術,將資料序列劃分成為越來越小的半子表,再對半子表排序,最後再用遞迴步驟將排好序的半子表合併成為越來越大的有序序列。其中 歸 代表的是遞迴的意思,即遞迴地將陣列折半地分離為單個陣列。例如,陣列 5,2,1,7 會先折半,分為 5,2 和 1,7 兩個子陣列,...
歸併排序遞迴實現
對於歸併排序,不僅有遞迴的實現方式,還有迭代的實現方式。迭代法實現歸併排序的 如下 include include define max size 10 實現歸併,並將最後的資料放入到list1中 void merging int list1,int list1 size,int list2,int...