折半查找法(在顺序数组中找一个数,得到它是第几个数)

在顺序数组中找一个数,得到它是第几个数

用折半查找法
int arr[]={1,2,3,4,5,6,7,8,9,10,11,12};

int low=0;//最小的下标
int hight=len-1;//最大的下标=长度-1,因为下标是从0开始,长度从1开始;
int mid;//中间下标
mid=(low+hight)/2;//中间下标等于最低加最高下标再除以2

eg:
找12这个数,起初low=0,hight=11;

判断mid=(0+11)/5=5下标的数是不是12
arr[mid]=arr[5]=6//不是12;
因为12比6大,那么12这个数一定在arr[mid]的右边
所以让low=mid+1=6;

再判断mid=(6+12)/2=9下标的数是不是12
arr[mid]=arr[9]=10//还不是12
因为12比10还大,那么12这个数一定还在arr[mid]的右边
所以再让low=mid+1=10;

再判断mid=(10+12)/2=11下标的数是不是12
arr[mid]=arr[11]=12//是12,那么此时的mid就是12这个数的下标

eg:
找4这个数起初low=0,hight=12

判断mid=(0+11)/2=5下标的数是不是4
arr[mid]=arr[5]=6//不是4;
因为4比6小,那么这个数一定在arr[mid]的左边
所以让hight=mid-1=4

再判断mid=(0+4)/2=2下标的数是不是4
arr[mid]=arr[2]=3//不是4
因为4比3大,那么4这个数一定在arr[mid]的右边
所以让low=mid+1=4;

再判断mid=(3+4)/2=3下标的数是不是3
arr[mid]=arr[3]=4//是4,那么此时的mid就是4这个数的下标,

#include<stdio.h>
int Show(int arr[],
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值