二分法查找效率高,其查找次數與總元素數量存在對數關系
- 原理
在進行二分法查找前需要先對數據進行排序(具體排序實現詳見下一篇文章),定義left(數據集的開頭),right(數據集結尾)兩個變量,然后在這組數據中找到mid=(left+right)/2,然后將待查找元素與mid所指元素進行比較,如果相等將索引返回,如果查找元素大于mid所指元素,則將left向右移動即left=mid+1;如果查找元素小于mid所指元素,則將left向左移動即right=mid-1。重復以上過程直到left>right(因為此時表明并不存在待查找元素) - C語言實現方法
<pre>
include <stdio.h>
int search(int aim,int data[],int size);
int main(){
int aim=14;
int data[]={5,7,9,11,13,17,24,47,68,72,89,90,112};
printf("%d\n",search(aim,data,13));//希望輸出14所對應的索引號
return 0;
}
int search(int aim,int data[],int size){
//二分法搜索
int det = -1;
int left = 0;//定義left整數變量
int right = size-1;//定義right
while(left<=right){//在while循環中直到有一個條件結束搜索
int mid = (left+right)/2;
if(data[mid]<aim){
left = mid+1;
}else if(data[mid]>aim){
right = mid-1;
}else{
det = mid;
break;//一定要break跳出循環
}
}
return det;
}
</pre>