1、基本思路
在有序序列中,取中間元素作為比較對象,若給定值與中間元素的要查找的數(shù)相等,則查找
成功;若給定值小于中間元素的要查找的數(shù),則在中間元素的左半?yún)^(qū)繼續(xù)查找;
若給定值大于中間元素的要查找的數(shù),則在中間元素的右半?yún)^(qū)繼續(xù)查找。
不斷重復上述查找過 程,直到查找成功,或所查找的區(qū)域無數(shù)據(jù)元素,查找失敗。
2、實現(xiàn)步驟
【步驟】
1 min=0;max=len-1;// 設置初始區(qū)間
2 當min>max 時,返回查找失敗信息// 表空,查找失敗
3 min≤max,mid=(min+max)/2; //取中點
a.b.c進入循環(huán)
a. 若key
b. 若key>arr[mid],min=mid+1;轉2 // 查找在右半?yún)^(qū)進行
c. 若key=arr[mid],返回數(shù)據(jù)元素在表中位置//查找成功
折半查找代碼實現(xiàn):
?輸入一組有序數(shù)據(jù),使用折半查找法查找一個數(shù)據(jù),并輸出其位 置。
intserach(intarr[],int len,int key){
int min =0;
int max = len-1;
for(int i=0; i < len; ++i) {
printf("%d \t",arr[i]);
}
printf("\n");
while(min<=max) {
intmid = (max+min)/2;
if(arr[mid]>key) {
max = mid-1;
}else if(arr[mid]
min = mid+1; }else{
returnmid;
}
}