C 用迭代的方式實現歸併排序

2021-09-11 02:35:33 字數 1455 閱讀 8028

思路如下:(用乙個別人個圖)

兩天加在一起寫了三個小時才寫出來,思路比較亂,簡單的歸併排序讓我給寫複雜了,**裡能看出來好多修補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 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。演算法描...