C语言二分查找(折半查找)

二分查找(折半查找)

前提条件

1.是在该数列有序的情况下进行(升序或降序)。

2.只能查找一个数。

思想:按照折中的方法将要找的数据范围通过折半的方法不断压缩,缩减掉一半的查找范围,再从剩余的数据中折不断通过折半的方法压缩减掉一半的查找范围,直到找到该数为止。

优点:极大的提高了其效率

图片解析:

#include<stdio.h>
int main()
{
    int a[] = { 1,2,3,4,5,6,7,8,9,10 };//一串已知的整形有序数组
    int x , left = 0,  //最左边数的下标 
	 right = sizeof(a) / sizeof(a[0]) - 1;//最右边数的下标  
    scanf("%d", &x);   //输入你要查找的数; 
    while (left <= right)  //数组的最小下标不可能超过最后一个数组的下标 如果超过则说明已经越界了在这代表着要查询的数不存在 
    {
        int mid = left+(right-left)/2;//开始折中查找,定位到最中间的数后开始比较 
        if (x < a[mid])  //如果中间的这个数 比你要查找的数小 
        {                  //则会将大于或等于这个中间数的数据全部抛弃从剩下的数中继续折中查找 
            right = mid-1; //将剩下数的最右边数组的下标重新赋值; 
        }
        if (x > a[mid]) //同理如果中间的这个数,比你要查找的数大 
        {                 //则会将小于或等于中间数的数据全部抛弃从剩下的数中继续折中查找 
            left = mid+1; //将剩下数的最左边的数组的下标重新赋值 
        }
        if(x == a[mid]) //如果你输入的数恰好等于中间这个数,则已经找到了该数 可以将其位置输出 
        {
            printf("该数的下标是%d\n", mid);
            break;  //找到后可以中断循环查找 
        }
    }
    if (left > right)  //当你查找的过程中最左边数的下标超过了数组最右边数的数组的下标时 
    {                  //则代表该数组中没有该数的存在 
        printf("该数不存在当前数组中");
    }
    return 0;
}
以上就是二分查找(折半查找)的做法以及解析.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值