分治法和遞迴的原理及其應用例項 歸併排序

2021-10-05 03:57:52 字數 1312 閱讀 9908

1、遞迴的描述:

為了解決乙個給定的問題,演算法一次或多次遞迴的呼叫其自身以解決緊密相關的若干子問題。

2、分治法思想:

將原問題分解為幾個規模較小但類似於原問題的子問題,遞迴的求解這些子問題,然後再合併這些子問題的解來建立原問題的解。

分治模式在每層遞迴時都有三個步驟:

3、歸併排序例項:

3.1、演算法思路:

3.2、演算法示意圖:

3.3、**:ps(**量大、多看注釋行)

void

mergesort

(int

* a,

int n)

// 給定待排陣列指標a與陣列大小n

else

}void

msort

(int

* a,

int*tmpa,

int l,

int rend)

// 分

}void

merge

(int

* a,

int*tmpa,

int l,

int r,

int rend)

// 治

else

}while

(l<=lend)

// 複製左邊剩下的元素(若有)

while

(r<=rend)

// 複製右邊剩下的元素(若有)

for(

int i =

0; i

,rend--

)// 將零時陣列元素複製回原陣列

}

演算法總結:1、需要一倍空間,因為要建立tmpa用於零時儲存排序後結果;

2、排序時間為:nlogn;

3、常用於外排序,演算法穩定;

4、主要為分治思想,分為單個元素(有序),兩兩合併,向上逐層合併。

遞迴和分治思想及其應用

更多 如果可以使用迭代,盡量別使用遞迴。由編譯原理可以知道,每次自呼叫的時候,計算機都需要儲存在呼叫,浪費時間空間。當然,迭代是當我們知道迴圈次數的時候。而當我們不知道迴圈次數,比如說對於資料夾和檔案進行遍歷,不知道深度的情況下,我們就需要遞迴來實現。顯然,遞迴是先解決小的問題,這種思想是分治思想。...

遞迴和分治思想及其應用

目錄 更多 如果可以使用迭代,盡量別使用遞迴。由編譯原理可以知道,每次自呼叫的時候,計算機都需要儲存在呼叫,浪費時間空間。當然,迭代是當我們知道迴圈次數的時候。而當我們不知道迴圈次數,比如說對於資料夾和檔案進行遍歷,不知道深度的情況下,我們就需要遞迴來實現。顯然,遞迴是先解決小的問題,這種思想是分治...

遞迴和分治思想及其應用

目錄更多 如果可以使用迭代,盡量別使用遞迴。由編譯原理可以知道,每次自呼叫的時候,計算機都需要儲存在呼叫,浪費時間空間。當然,迭代是當我們知道迴圈次數的時候。而當我們不知道迴圈次數,比如說對於資料夾和檔案進行遍歷,不知道深度的情況下,我們就需要遞迴來實現。顯然,遞迴是先解決小的問題,這種思想是分治思...