二分法初学

二分法初学,第1张

二分法初学

初学二分法,第一次自己尝试打的

有几点要注意的:

1.中间下标一定要放在循环内

2.查找成功的那条,特别容易忘记break

3.最好构建之前有个清晰的构建思路,本人的思路仅供参考

//二分法查找:
//1.准备阶段:
//a.被查找数组arr和查找目标k
//b.数组元素个数sz
//c.左中右数组下标(left/mid/right)
//2.二分法系统

自己第一次打的:

#include

int main()
{
    int arr[]={1,2,3,4,5,6,7,8,9,10};//被查找的数组
    int k=2;//查找目标
    //scanf("%d",&k);//想实现随意查找
    int sz=(sizeof(arr)/sizeof(arr[0]));//数组个数sz=10
    int left=0;//左下标
    int right=sz-1;//右下标=数组元素个数-1
    
    //构建二分法
    while(left<=right)//这里的大于等于,等于不可漏!!!
    {
    int mid=(left+right)/2;//中间下标,一定要将中间下标放到循环内部,才能重新定义中间下标
    if(arr[mid]     {    left=mid+1;   }//将左下标调整到原中间下标的右边,中间下标也随之改变
    else if(arr[mid]>k)//目标在中间量左边时
    {    right=mid-1;  }//将右下标调整到原中间下标的左边,中间下标也随之改变
    else if(arr[mid]=k)//目标刚好等于中间量时
    {printf("找到目标,下标为:%dn",mid);    break;}//即找到目标,注意找到目标后要退出循环!!!
    }

    if(left>right)//当左下标小于右下标时,整个数组都不存在目标
    {   printf("该数组不存在你要找到数");   }
    getchar();
    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5657799.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存