C语言实现折半查找,给定任意一个num值,查找是否在序列之中,如果在返回其位置,若不在则输出“查找失败“

c语言实现二分查找

  1. 什么是二分查找:
    二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
  2. 二分查找的工作原理:该图片来源于网络
    简单来说就是不断比较判断序列下标为mid对应的值是否等于输入的值,不断缩小查找范围额,等于则跳出循;以下为例:
    int arr[10] = {1, 3, 4, 5, 6, 7, 8, 9, 10, 13}; 

对于这个序列,我们想要查找数:num=5;
初始数据low=0;high=9(数组位数-1,数组下标从0开始)
mid=(low+high)/2 向下取整 也就是4;
通过比较arr[mid]==num,此时arr[mid]对应的值为6;6>5则该表high的值:high=mid-1;此时low=0,high=3;这样查找范围就变小了。反之改变low的值为low=mid+1;以此类推,这样就能找到你想要查找的值了。

    while (low <= high)
    {
        mid = (low + high) / 2;
        if (arr[mid] == num)
        {
            printf("这个数的下标位置在%d上", mid+1);
            break;
        }
        else if (arr[mid] < num)
            low = mid + 1;
        else
            high = mid - 1;
    }
  1. 完整代码
#include<stdio.h>
void halfFound(int arr[],int num){
    int low=0;int high=9;
    while (low<=high)
    {   
        int mid=(low+high)/2;
        if (num==arr[mid]){
            printf("这个数的位置是:%d",mid+1);
            break;
        }
        else if(num>arr[mid])
        low=mid+1;
        else
        high=mid-1;
    }
    if (low<=high);
    else
        printf("查找失败!");
    
    
}
int main(){
    int num;
    int arr[10] = {1, 3, 4, 5, 6, 7, 8, 9, 10, 13}; 
    printf("请输入你想要查找的数:\n");
    scanf("%d",&num);
    halfFound(arr,num);
}

4.结果演示:
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值