ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-12-15 12:58:00  阅读:138  来源: 互联网

标签:折半 arr num mid high 查找 low


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有