题目要求
写一个函数,实现一个整形有序数组的二分查找。
分析
//二分查找
//在一个有序数组中查找具体的某个数
//若找到了,则返回该数的下标,找不到则返回-1
代码
#include <stdio.h>
int binary_search(int arr[], int sz, int k){
int left=0;//二分后的左端下标
int right=sz-1;
while(left<=right){
int mid=(left+right)/2; //每一次二分法后的中间元素下标
if(arr[mid] < k){
left=mid+1;//更新eft
}
else if(arr[mid] > k){
right=mid-1;//更新right
}
else{
return mid;
}
}
return -1;//数据不存在
}
int main(){
int arr[]={1,2,3,4,5,6,7,8,9,10};//有序数组
int sz=sizeof(arr)/sizeof(arr[0]);
int k;
scanf("%d",&k);//输入要查找的数
int ret=binary_search(arr, sz, k); //函数调用
if(ret==-1){
printf("找不到指定数字\n");
}
else{
printf("找到了指定数字,下标是:%d\n",ret);
}
return 0;
}
-------------------------END-------------------------