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

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.结果演示:
在这里插入图片描述

标签:折半,arr,num,mid,high,查找,low
来源: https://blog.csdn.net/aiyalhh/article/details/121949547