二分查找的思想:
首先找到数组中中间元素,与你所需要的值相比较,若中间元素大于你所需要的值,则更新右边元素的下标。若中间元素小于你所需要的值,则更新左边元素的下标。反复寻找,找到返回中间元素的下标,找不到则退出。
#include<stdio.h>
#define sz 10 //数组的元素个数
int binary_search(int arr[], int key){
int left = 0; //左边元素的下标
int right = sz-1; //右边元素的下标
while(left <= right){
int mid = (left+right)/2; //中间元素的下标
if(arr[mid] > key)
right = mid-1; //右边元素的下标的更新
else if(arr[mid] < key)
left = mid+1; //左边元素下标的更新
else
return mid; //找到了,返回中间元素的下标
}
return -1; //找不到所相等的元素返回 -1
}
int main(){
int arr[sz]={0};
int i,key;
printf("请输入数组的元素:\n");
for(i=0;i<sz;i++)
scanf("%d",&arr[i]);
printf("请输入你要找的值:\n");
scanf("%d",&key);
int mid_index = binary_search(arr,key); //返回值用mid_index接收
if(mid_index == -1)
printf("对不起没有找打值为%d的下标:\n",key);
else
printf("值为%d的下标为:%d\n",key,mid_index);
return 0;
}