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、主要為分治思想,分為單個元素(有序),兩兩合併,向上逐層合併。
遞迴和分治思想及其應用
更多 如果可以使用迭代,盡量別使用遞迴。由編譯原理可以知道,每次自呼叫的時候,計算機都需要儲存在呼叫,浪費時間空間。當然,迭代是當我們知道迴圈次數的時候。而當我們不知道迴圈次數,比如說對於資料夾和檔案進行遍歷,不知道深度的情況下,我們就需要遞迴來實現。顯然,遞迴是先解決小的問題,這種思想是分治思想。...
遞迴和分治思想及其應用
目錄 更多 如果可以使用迭代,盡量別使用遞迴。由編譯原理可以知道,每次自呼叫的時候,計算機都需要儲存在呼叫,浪費時間空間。當然,迭代是當我們知道迴圈次數的時候。而當我們不知道迴圈次數,比如說對於資料夾和檔案進行遍歷,不知道深度的情況下,我們就需要遞迴來實現。顯然,遞迴是先解決小的問題,這種思想是分治...
遞迴和分治思想及其應用
目錄更多 如果可以使用迭代,盡量別使用遞迴。由編譯原理可以知道,每次自呼叫的時候,計算機都需要儲存在呼叫,浪費時間空間。當然,迭代是當我們知道迴圈次數的時候。而當我們不知道迴圈次數,比如說對於資料夾和檔案進行遍歷,不知道深度的情況下,我們就需要遞迴來實現。顯然,遞迴是先解決小的問題,這種思想是分治思...