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

9.折半查找

时间:2023-04-22 23:36:25浏览次数:28  
标签:折半 int mid high 查找 low printf

 问题分析:

首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
代码:

#include "stdio.h"
int main()
{
int n,i;
printf("请输入要查询的序列的元素个数:\n");
scanf("%d",&n);
int a[n+1];
printf("请输入要查询的序列:\n");
for(i=1;i<n+1;i++)
{
scanf("%d",&a[i]);
}
int key;
i=1;
printf("请输入要查询的元素:\n");
scanf("%d",&key);
int low,mid,high;
low=1;
high=n;
mid=(low+high)/2;
while(low<=high)
{
if(a[mid]>key)
{
high=mid-1;
mid=(low+high)/2;
}
else if(a[mid]<key)
{
low=mid+1;
mid=(low+high)/2;
}
else
{
printf("元素的位置为:%d",mid);
break;
}
}
if(low>high)
printf("此数列中没有该元素");
return 0;
}

标签:折半,int,mid,high,查找,low,printf
From: https://www.cnblogs.com/cqdycazs/p/17344444.html

相关文章

  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之002 week01 02-02 线性查找法
    1、线性查找法什么是线性查找法?举例:在一沓试卷中,找到属于自己的那张试卷。第1张:不是第2张:不是第3张:不是……第n张:是,找到了!第n+1张:不找了……这个解决问题的思路和过程体现就是线性查找法的思想。2、线性查找法思路梳理线性查找法,就是在线性的数据结构中来完成。例如:在data数......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之003 week01 02-03 代码实现线性查找
    1、算法描述在数组中逐个查找元素,即遍历。2、思路原理如算法描述,基本是最简单的代码块了,没有什么额外的原理。3、初步的代码实现线性查找法初步的代码实现:packagecom.mosesmin.datastructure.week01.chap02;/***@Misson&Goal代码以交朋友、传福音*@ClassNameLinearSearc......
  • 折半查找
    一、问题描述:  二、设计思路: 折半查找思路是找首位置low,和末位置high,中间位置mid=(首位置+末位置)/2,满足的循环是首位置<=末位置,如果中间的位置上的数小于要找的目标,则low=mid+1转换为新的首位置和末位置之间找数字,之间缩小一半的范围,这就是二分查找的妙处,如果中间的位置上......
  • 查找算法
    查找算法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......