二分查找(折半查找)

折半查找思想 在有序表中取中间值与所要查找的值比较,若相等,查找成功;查找值小于中间值,在中间值左边的部分继续查找;
查找值大于中间值,在中间值右边部分继续查找。为什么减 1 ,因为比较的是中间值,所以不成功的话要在中间值的左或右部分查找

折半查找图片过程
二分查找(折半查找)
文章图片

图片来源https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=315804038,6599760&fm=26&gp=0.jpg
折半查找要求 二分查找(折半查找)
文章图片

时间复杂度o(log n) 【二分查找(折半查找)】
代码

? #include #define Max 100 typedef struct chazhao { int a[Max]; int length; }ser; int seatchc(ser* s,int key) { int low =0; int high=s->length-1; while(low<=high) { int middle=(low+high)/2; if(s->a[middle]==key) { return middle; } else { if(s->a[middle]>key) { high=middle-1; } else { low=middle+1; } } } return -1; } void creats(ser *s) { int i; printf("输入元素的个数:"); scanf("%d",&s->length); for(i=0; ilength; i++) { scanf("%d",&s->a[i]); } }int main() { ser l; int k,j; creats(&l); printf("输入查找的元素:"); scanf("%d",&k); j=seatchc(&l,k); if(j!=-1) { printf("元素的位置:%d",j+1); } else{ printf("No find\n"); } return 0; }?


    推荐阅读