9.2 床蓑臥孀燕!嗤會燕議孵磯臥孀
嗤會燕軸頁燕嶄方象圷殆梓購囚鷹幅會賜週會電双。
孵磯臥孀議房?葎?壓嗤會燕嶄?函嶄寂圷殆恬葎曳熟斤嵆?飛公協峙嚥嶄寂圷殆議購囚鷹屢吉?夸臥孀撹孔?飛公協峙弌噐嶄寂圷殆議購囚鷹?夸壓嶄寂圷殆議恣磯曝写偬臥孀?飛公協峙寄噐嶄寂圷殆議購囚鷹?夸壓嶄寂圷殆議嘔磯曝写偬臥孀。音僅嶷鹸貧峰臥孀狛殻?岷欺臥孀撹孔?賜侭臥孀議曝囃涙方象圷殆?臥孀払移。
‐化帶/
? low=1?high=length? // 譜崔兜兵曝寂
? 輝low>high 扮?卦指臥孀払移佚連// 燕腎?臥孀払移
? low≤high?mid=(low+high)/2; // 函嶄泣
a. 飛kx<tbl.elem[mid].key?high=mid-1?廬? // 臥孀壓恣磯曝序佩
b. 飛kx>tbl.elem[mid].key?low=mid+1?廬? // 臥孀壓嘔磯曝序佩
c. 飛kx=tbl.elem[mid].key?卦指方象圷殆壓燕嶄了崔// 臥孀撹孔
‐箭9.1/嗤會燕梓購囚鷹電双泌和?
? 臥孀購囚鷹葎14 議狛殻
‐麻隈9.2/
int Binary_Search(S_TBL tbl?KEY kx)
{ /* 壓燕tbl 嶄臥孀購囚鷹葎kx 議方象圷殆?飛孀欺卦指乎圷殆壓燕嶄議了崔?倦夸?卦指0 */
int mid?flag=0?
low=1?high=length? /* ?譜崔兜兵曝寂*/
while(low<=high) /* ?燕腎霞編*/
{ /* 掲腎?序佩曳熟霞編*/
mid=(low+high)/2? /* ?誼欺嶄泣*/
if(kx<tbl.elem[mid].key) high=mid-1? /* 距屁欺恣磯曝*/
else if(kx>tbl.elem[mid].key) low=mid+1? /* 距屁欺嘔磯曝*/
else { flag=mid?break?} /* 臥孀撹孔?圷殆了崔譜崔欺flag 嶄*/
}
return flag;
}
‐來嬬蛍裂/
貫孵磯臥孀狛殻心?參燕議嶄泣葎曳熟斤嵆?旺參嶄泣繍燕蛍護葎曾倖徨燕?斤協了欺議徨燕写偬宸嶽荷恬。侭參?斤燕嶄耽倖方象圷殆議臥孀狛殻?辛喘屈我峯栖宙峰?各宸倖宙峰臥孀狛殻議屈我峯葎登協峯。 辛參心欺?臥孀燕嶄販匯圷殆議狛殻?軸頁登協峯嶄貫功欺乎圷殆潤泣揃抄貧光潤泣購囚鷹議曳熟肝方?匆軸乎圷殆潤泣壓峯嶄議蚊肝方。斤噐n 倖潤泣議登協峯?峯互葎k?夸嗤2k-1 -1<n≤2k-1?軸k-1<log2(n+1)≤k?侭參k= 。咀緩?孵磯臥孀壓臥孀撹孔扮?侭序佩議購囚鷹曳熟肝方崛謹葎。
俊和栖網胎孵磯臥孀議峠譲臥孀海業。葎宴噐網胎?參峯互葎k 議諾屈我峯(n=2k-1)葎箭。邪譜燕嶄耽倖圷殆議臥孀頁吉古楕議?軸Pi= ?夸峯議及i 蚊嗤2i-1 倖潤泣?咀緩?孵磯臥孀議峠譲臥孀海業葎? 侭參?孵磯臥孀議扮寂丼楕葎O(log2n)。
孵磯臥孀議房?葎?壓嗤會燕嶄?函嶄寂圷殆恬葎曳熟斤嵆?飛公協峙嚥嶄寂圷殆議購囚鷹屢吉?夸臥孀撹孔?飛公協峙弌噐嶄寂圷殆議購囚鷹?夸壓嶄寂圷殆議恣磯曝写偬臥孀?飛公協峙寄噐嶄寂圷殆議購囚鷹?夸壓嶄寂圷殆議嘔磯曝写偬臥孀。音僅嶷鹸貧峰臥孀狛殻?岷欺臥孀撹孔?賜侭臥孀議曝囃涙方象圷殆?臥孀払移。
‐化帶/
? low=1?high=length? // 譜崔兜兵曝寂
? 輝low>high 扮?卦指臥孀払移佚連// 燕腎?臥孀払移
? low≤high?mid=(low+high)/2; // 函嶄泣
a. 飛kx<tbl.elem[mid].key?high=mid-1?廬? // 臥孀壓恣磯曝序佩
b. 飛kx>tbl.elem[mid].key?low=mid+1?廬? // 臥孀壓嘔磯曝序佩
c. 飛kx=tbl.elem[mid].key?卦指方象圷殆壓燕嶄了崔// 臥孀撹孔
‐箭9.1/嗤會燕梓購囚鷹電双泌和?
7?14?18?21?23?29?31?35?38?42?46?49?52
壓燕嶄臥孀購囚鷹葎14 才22 議方象圷殆。? 臥孀購囚鷹葎14 議狛殻
‐麻隈9.2/
int Binary_Search(S_TBL tbl?KEY kx)
{ /* 壓燕tbl 嶄臥孀購囚鷹葎kx 議方象圷殆?飛孀欺卦指乎圷殆壓燕嶄議了崔?倦夸?卦指0 */
int mid?flag=0?
low=1?high=length? /* ?譜崔兜兵曝寂*/
while(low<=high) /* ?燕腎霞編*/
{ /* 掲腎?序佩曳熟霞編*/
mid=(low+high)/2? /* ?誼欺嶄泣*/
if(kx<tbl.elem[mid].key) high=mid-1? /* 距屁欺恣磯曝*/
else if(kx>tbl.elem[mid].key) low=mid+1? /* 距屁欺嘔磯曝*/
else { flag=mid?break?} /* 臥孀撹孔?圷殆了崔譜崔欺flag 嶄*/
}
return flag;
}
‐來嬬蛍裂/
貫孵磯臥孀狛殻心?參燕議嶄泣葎曳熟斤嵆?旺參嶄泣繍燕蛍護葎曾倖徨燕?斤協了欺議徨燕写偬宸嶽荷恬。侭參?斤燕嶄耽倖方象圷殆議臥孀狛殻?辛喘屈我峯栖宙峰?各宸倖宙峰臥孀狛殻議屈我峯葎登協峯。 辛參心欺?臥孀燕嶄販匯圷殆議狛殻?軸頁登協峯嶄貫功欺乎圷殆潤泣揃抄貧光潤泣購囚鷹議曳熟肝方?匆軸乎圷殆潤泣壓峯嶄議蚊肝方。斤噐n 倖潤泣議登協峯?峯互葎k?夸嗤2k-1 -1<n≤2k-1?軸k-1<log2(n+1)≤k?侭參k= 。咀緩?孵磯臥孀壓臥孀撹孔扮?侭序佩議購囚鷹曳熟肝方崛謹葎。
俊和栖網胎孵磯臥孀議峠譲臥孀海業。葎宴噐網胎?參峯互葎k 議諾屈我峯(n=2k-1)葎箭。邪譜燕嶄耽倖圷殆議臥孀頁吉古楕議?軸Pi= ?夸峯議及i 蚊嗤2i-1 倖潤泣?咀緩?孵磯臥孀議峠譲臥孀海業葎? 侭參?孵磯臥孀議扮寂丼楕葎O(log2n)。