思路如下:(用乙個別人個圖)
兩天加在一起寫了三個小時才寫出來,思路比較亂,簡單的歸併排序讓我給寫複雜了,**裡能看出來好多修補bug的痕跡。
自己生成了幾個測試用例,用666、500、100個數都試了試,排序結果沒有問題。
應該沒什麼bug吧
#include
#include
#include
using namespace std;
intmain()
vector<
int> temp;
int j1, j2;
int part =0;
//第幾段
int curpush =0;
for(i =
1; i < n; i *=2
)//i表示當前連續i個數字有序
break;}
if(arr1[part*i + j1]
< arr1[
(part +1)
*i + j2]
)//正在比較的兩項
else
if(arr1[part*i + j1]
>= arr1[
(part +1)
*i + j2]
)//正在比較的兩項
if(j1 >= i || j2 >= i)
//當比較兩部分時,如果其中一部分已經全部push進去了,那麼就把另外一部分乙個乙個挨著push進去
for(
; j2 < i; j2++
) part +=2
;//對後兩部分排序
j1 =0;
j2 =0;
curpush =0;
}}//複製
for(
int k =
0; k < n; k++)}
//輸出歸併排序結果
cout <<
"你的排序:"
<< endl;
for(
int k =
0; k < n; k++
) cout << endl;
//輸出自帶sort函式排序結果
cout <<
"答案:"
<< endl;
sort
(arr1.
begin()
, arr1.
end())
;for
(int k =
0; k < n; k++
) cout << endl;
system
("pause");
}
歸併排序的實現方式
演算法思想 將兩個有序的陣列歸併成乙個更大的有序陣列。public class merge private static void sort comparable a,int low,int high 原地歸併的抽象方法 將乙個陣列變為有序 public static void merge comp...
歸併排序 C 實現
歸併排序跟快速排序一樣,也是基於 分治法 歸併排序與快速排序的區別 快速排序是先 分治 成兩個子串行,然後呼叫本身繼續遞迴進行 分治 歸併排序是先遞迴地分成子串行,然後按演算法合併。歸併排序是先遞迴地把待排序序列分成若干子串行,直到最後分成乙個乙個元素為子串行,然後對些子串行中每個元素,依照其大小合...
C 實現歸併排序
歸併 歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。演算法描...