求最大值和最小值的分治算法
實(shí)踐題目:
給定一個(gè)順序表,編寫一個(gè)求出其最大值和最小值的分治算法。
分析:
由于順序表的結(jié)構(gòu)沒(méi)有給出,作為演示分治法這里從簡(jiǎn)順序表取一整形數(shù)組數(shù)組大小由用戶定義,數(shù)據(jù)隨機(jī)生成。我們知道如果數(shù)組大小為 1 則可以直接給出結(jié)果,如果大小為 2則一次比較即可得出結(jié)果,于是我們找到求解該問(wèn)題的子問(wèn)題即: 數(shù)組大小 <= 2。到此我們就可以進(jìn)行分治運(yùn)算了,只要求解的問(wèn)題數(shù)組長(zhǎng)度比 2 大就繼續(xù)分治,否則求解子問(wèn)題的解并更新全局解以下是代碼。
*/
/*** 編譯環(huán)境TC ***/
#include
#include
#include
#define M 40
/* 分治法獲取最優(yōu)解 */
void PartionGet(int s,int e,int *meter,int *max,int *min){
/* 參數(shù):
* s 當(dāng)前分治段的開始下標(biāo)
* e 當(dāng)前分治段的結(jié)束下標(biāo)
* meter 表的地址
* max 存儲(chǔ)當(dāng)前搜索到的最大值
* min 存儲(chǔ)當(dāng)前搜索到的最小值
*/
int i;
if(e-s <= 1){ /* 獲取局部解,并更新全局解 */
if(meter[s] > meter[e]){
if(meter[s] > *max)
*max = meter[s];
if(meter[e] < *min)
*min = meter[e];
}
相關(guān)推薦:2011計(jì)算機(jī)等級(jí)考試二級(jí)C輔導(dǎo)實(shí)例編程匯總
計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言歷年真題匯總(2005-2010)
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |