写一个折半查找函数,尽可能使得时间复杂度最小。
#include<stdio.h>
#include<string.h>
int zheban(int *a,int n,int x);
int main(){
int n;
printf("请输入字符串长度 :");
scanf("%d",&n);
int a[n];
int x;//要查找的数
printf("请输入该数组各项值:");
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
printf("请输入要查找的数:");
scanf("%d",&x);
printf("该值在数组中位置:%d",zheban(a,n,x));
return 0;
}
int zheban(int *a,int n,int x){
int left=0,right=n-1;
while(left<=right){
int mid=(right+left)/2;
if(a[mid]==x){
printf("查找成功\n");
return mid;
}else if(a[mid]>x){
right=mid-1;
} else if(a[mid]<x){
left=mid+1;
}
}
if(left>right){
printf("查找失败\n");
}
}