zoukankan      html  css  js  c++  java
  • 二分法查找(C语言)

    二分法是一种高效的查找方法,其适用于已经排好序的数组

    基本思路

    从数组最中间的数开始查找判断,若不是需要查找的数字,则比较大小,之后则在从中间分开的两边中的一边从最中间开始查找判断,以此类推

    算法描述

    这里以升序数组为例,降序数组类似

    1. 记录数组最中间数的下标,将其中的数与要查找的数进行比较
    2. 若相等,停止查找,若大于要查找的数,则将数组下标上限换为较大半区的最小下标;若小于要查找的数,则将数组下标的下限换为较小半区的最大下标
    3. 重复第一步,直到数组下标不能调换,若查找到则停止查找,若未找到,则返回不存在的结果

    代码实现

    这里以升序数组为例,降序数组类似

    # include<stdio.h>
    int f(int, int [], int);
    int main()
    {
        int n;
        int arr[10]={1,2,3,4,5,6,7,8,9,10};
        scanf("%d", &n);//输入要查找的数 
        int m=f(n, arr, 10-1);
        if(f(n, arr, 10-1)!=-1)
        printf("该数所在下标为:%d
    ", m);
        else
        printf("该数不存在
    "); 
    }
    int f(int n, int a[], int h)
    {
        int i, l, mid;
        l = 0;
        while(l<=h)//注意有等号,因为可能最后一次查找就只剩一个数,则这时上下限下标相等
        {
            mid=(l+h)/2;//计算中间下标
            if(a[mid]==n)//判断是否为目标数
            return mid;
            else if(a[mid]<n)
            l=mid+1;//如果中间数小于目标数,则将数组下限改为较大半区的下限
            else 
            h=mid-1;//如果中间数大于目标数,则将数组上限改为较小半区的上限
        }
        return -1;//返回-1表示目标数不存在
    }
  • 相关阅读:
    VR虚拟现实眼镜那些事
    C#使用MysqlBackup.Net 备份MySQL数据库
    AgileConfig服务端搭建
    IE浏览器,各版本的请求头信息
    搜索算法
    一个完整的信号采集系统项目开发流程
    Linux内核模块简介
    搭建wordpress开发环境
    AbstractRoutingDataSource+AOP+JNDI实现spring动态数据源
    Linux 挂载磁盘记录
  • 原文地址:https://www.cnblogs.com/pufan/p/12049671.html
Copyright © 2011-2022 走看看