首页 > 其他分享 >折半查找

折半查找

时间:2023-04-22 10:11:54浏览次数:33  
标签:折半 int 查找 lenth low sizeof

一、问题描述:

 

 

二、设计思路:

  折半查找思路是找首位置low,和末位置high,中间位置mid=(首位置+末位置)/2,满足的循环是首位置<=末位置,如果中间的位置上的数小于要找的目标,则low=mid+1转换为新的首位置和末位置之间找数字,之间缩小一半的范围,这就是二分查找的妙处,如果中间的位置上的数大于要找的目标,则high=mid-1。老在理论上说也不好理解,咱们能动手就不动口,看图

 

 

 

三、程序流程图:

 

 

四、代码实现

#include<stdio.h>
#include<math.h>
#define N 11
int main()
{
    int a[N]={5,13,19,21,37,56,64,75,80,88,92};
    int target;
    int lenth=sizeof(a)/sizeof(a[0]);
    int index=-1;
    int low=0,mid,high=lenth-1;
    scanf("%d",&target);
    while(low<=high)
    {
        mid=(high+low)/2;
        if(a[mid]==target)
        {
            index=mid;
            break;
        }
        else if(a[mid]<target)
        {
            low=mid+1;
        }
        else high=mid-1;
    }
    if(index==-1)
    {
        printf("Not be found");
    }
    else 
        printf("%d找到了下标为:%d",target,index);
    return 0;
}

 

 值得注意的是我们弄了一个单独的变量index并赋了初值-1,这个就是我们拿来记录下标的,这里用到了一个计算数组长度的方法,lenth=sizeof(a)/sizeof(a[0])。回忆一下,昨天学的冒泡排序在折半查找中也能用上,折半查找要求必须是一个有序的数组,要么是升序,要么是降序,冒泡加折半查找就能解决我们大部分问题了

 

标签:折半,int,查找,lenth,low,sizeof
From: https://www.cnblogs.com/bzsc/p/17338328.html

相关文章

  • 查找算法
    查找算法1.线性查找线性查找(OrderSearch)是最简单的一种查找算法,直接从头到尾遍历,直至找到要查找的值为止。1.1代码实现packagecom.algorithm;/***@authorSnkrGao*@create2023-04-2019:52*/publicclassOrderSearch{publicstaticvoidmain(String[]......
  • Python用哈希算法查找相似图片(包括不同分辨率,不同大小,不同格式的图片)
    #-*-coding:utf-8-*-'''Python用哈希算法查找相似图片并放入[_df]的文件夹中相似图片包括不同分辨率,不同大小,不同格式,只要图片相似就会算重复文件安装cv2pipinstallopencv-python'''importosimportcv2importnumpyasnpimportshutilimportrandomclas......
  • 折半查找
    问题:N个有序整数数列已经放在一堆数组中,利用二分查找法,查找整数m在数组中的位置,若找到则输出其下标值,反之则输出“notbefounded”。分析:首先定义整型变量,low,high,k,mid,其中low=0,high=N-1,k可以随便赋值一个小于0的数,输入所要查找的数m、,根据题干,这个数列是由小到大排列的,在while循......
  • 二分查找例题与模板(蓝桥杯复习+例题讲解+模板c++)
    文章目录二分模板1460.我在哪?102.最佳牛围栏113.特殊排序二分模板本文所使用的二分模板都是确保最终答案落在[L,R]以内,循环以L==R结束,每次二分的中间值会使mid成为左右区间的二者之一。单调递增序列找大于等于x的最小的值:区间的划分[l,mid][mid+1,r]while(l<r){ intmid......
  • js find 方法,查找到所需数值,立即返回,不会再继续循环
    注意和filter区别......
  • 二分查找:剑指 Offer 53 - I. 在排序数组中查找数字 I
    题目描述:统计一个数字在排序数组中出现的次数。 提示:•0<=nums.length<=105•-109 <=nums[i] <=109•nums 是一个非递减数组•-109 <=target <=109 解题思路:排序数组中的搜索问题,首先想到二分法解决。排序数组nums中的所有数字target......
  • 折半查找
    问题描述:  N个有序整数数列已放在一堆数组中,利用二分查找法查找整数m在数组中的位置。若找到,则输出其下表值,反之则输出“Notbefound!”  1.定义一个最低值位数low=0,定义一个最高值位数high=N-1;  2.当low<=high时计算mid=(low+high)/2;  3.如果要找的值m......
  • 二分查找
    给定一个 n 个元素有序的(升序)整型数组 nums和一个目标值 target ,写一个函数搜索 nums 中的target,如果目标值存在返回下标,否则返回-1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在nums中并且下标为4示例 2:输入:nums=[-1,0,3,5,9,......
  • 查找80端口请求数最高的前20个IP
    有时候业务的请求量突然上去了,那么这个时候我们可以查看下请求来源IP情况,如果是集中在少数IP上的,那么可能是存在攻击行为,我们使用防火墙就可以进行封禁。命令: netstat-anlp|grep80|greptcp|awk'{print$5}'|awk-F:'{print$1}'|sort|uniq-c|sort-nr|h......
  • 二分查找:剑指 Offer 11. 旋转数组的最小数字
    题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2]为[1,2,3,4,5]的一次旋转,该数组的最......