歸併排序 自頂向下 陣列實現

2021-10-09 19:14:24 字數 765 閱讀 6253

歸併(即merge函式)

二路歸併排序舉例:分為有序子表a,有序子表b。a中首個元素與b中首個元素比較;若a1小於b1,取出a1,比較a2與b1;若a1大於b1,取出b1,比較a1與b2。依次類推。

遞迴(即mergesort函式)

分解問題

#include

#include

//對應malloc函式與free函式的使用

void

disp

(int a,

int n)

void

merge

(int a,

int low,

int mid,

int high)

//核心

else

}while

(i<=mid)

//使左側的剩餘複製下來

while

(j<=high)

//使右側的剩餘複製下來

for(k=

0,i=low;i<=high;k++

,i++

)//將資料從臨時儲存放入陣列a

a[i]

=tmpa[k]

;free

(tmpa);}

void

mergesort

(int a,

int low,

int high)

//遞迴呼叫

}void

main()

自頂向下的原地歸併排序

歸併排序是一種簡單的遞迴排序演算法。思路 歸併排序即是將兩個有序的陣列歸併成乙個更大的有序陣列。那麼我們要將乙個陣列排序,我們可以先將這個陣列分成兩半分別排序,然後將結果歸併起來。其 歸併排序的速度非常快,但是卻需要額外的空間。為什麼需要額外的空間尼?因為我們使用歸併排序時是將兩個不同的有序陣列歸併...

演算法 歸併排序(自頂向下 自底向上)

思路 實現 兩種實現方式 自頂向下和自底向上 實現 自頂向下 mergesort.h 1 include 2 include 3 include insertionsort.h 4 5using namespace std 67 template8 將arr l.mid 和arr mid 1.r 兩...

自頂向下和自底向上的歸併排序區別

歸併排序中最基本的操作是 歸併 即將兩個 2 路歸併 或兩個以上的有序陣列組合成乙個更大的有序陣列。按照歸併順序的不同,歸併排序可以分為自頂向下和自底向上兩類。自頂向下的歸併排序進行的操作主要就是對陣列的拆分與合併。通過層層拆分得到單元素陣列,天生有序,然後歸併兩個單元素陣列得到乙個較大的有序陣列,...