依然是遞迴三部曲:
1.遞迴什麼時候結束:當start和end相等時,無法繼續再分下去。
2.遞迴返回的是什麼:返回的是已經完成歸併排序的子陣列(即返回的是公升序序列)。
3.每個遞迴中要做什麼:對兩個已經完成歸併排序的子陣列[start,mid]和[mid+1,end]重新進行歸併排序。
#include
#include
#include
using
namespace std;
//歸併排序
void
merge
(vector<
int>
&data,
int start,
int mid,
int end)
}//若second_start先到了後半段末尾
while
(first_start <= mid)
temp[copy_start++
]= data[first_start++];
//若first_start先到了前半段末尾
while
(second_start <= end)
temp[copy_start++
]= data[second_start++];
for(
int i = start; i <= end; i++
) data[i]
= temp[i];}
void
mergesort
(vector<
int>
&data,
int start,
int end)
intmain()
;mergesort
(v,0
, v.
size()
-1);
copy
(v.begin()
, v.
end(
), ostream_iterator<
int>
(cout,
" "));
system
("pause");
return0;
}
歸併排序遞迴實現
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...