/*
折半查找
*/
int half_search(int *arr,int d)
{
//定义low high mid;
int low = 0;
int high = N-1;
int mid;
while(low<=high){
//求取中间变量mid
mid = (low+high)/2;
//判断mid中的值 和 查询d 的大小
//如果d大 low = mid+1
//如果d小 high = mid-1
//如果相等,就返回
if(arr[mid]<d){
low = mid+1;
}else if(arr[mid]>d){
high = mid-1;
}else{
return mid;
}
}
return -1;
}
测试:
#include <stdio.h>
#define N 12
extern int half_search(int *arr,int d);
int main(void)
{
//数组从小到大排列
int arr[N]={3,12,18,20,32,55,60,68,80,86,90,100};
int data;
scanf("%d",&data);
int loc = half_search(arr,data);
if(loc==-1){
printf("数组中没有%d\n",data);
}else{
printf("%d在数组的第%d个位置\n",data,loc+1);
}
return 0;
}