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

1.9 折半查找

时间:2023-04-25 22:24:09浏览次数:30  
标签:折半 1.9 更新 mid high 查找 low else 指针

第一部曲:利用low和high两个指针扫描数组的元素,求出mid中间值根据mid的值和要查找的数进行判断,如果等于就找到了直接输出,如果不等,分情况,如果要找到数小于中间值就要更新右指针high,因为是闭区间,所以high可以直接更新为high-1,如果大于中间值就要更新左指针,更新为high+1。这里面要写个循环条件,low指针小于等于high指针,不满足这种情况后肯定循环一遍了,最后判断是不是找到了。

第二部曲:

 

第三部曲:

while(low<=high)//左小于等于右
{
mid=(low+high)/2;//更新中间值
if(m<a[mid])//如果在中间值左边,更新右端点
{
high=mid-1;
}
else
{
if(m>a[mid])//在中间值右边,更新左端点
low=mid+1;
else//如果等于,直接跳出循环,记录mid的值
{
k=mid;
break;
}
}
}

第四部曲:

#include<iostream>
using namespace std;
const int N=10;
int main()
{
int i,a[N]={-3,4,7,9,13,45,67,89,100,180},low=0,high=N-1,mid,k=-1,m;
for(i=0;i<N;i++)
cout<<a[i]<<" ";//输出数组a各个值
cout<<endl;
cin>>m;//输入要查找的数
while(low<=high)//左小于等于右
{
mid=(low+high)/2;//更新中间值
if(m<a[mid])//如果在中间值左边,更新右端点
{
high=mid-1;
}
else
{
if(m>a[mid])//在中间值右边,更新左端点
low=mid+1;
else//如果等于,直接跳出循环,记录mid的值
{
k=mid;
break;
}
}
}
if(k>=0)//如果mid被k代替,那么肯定大于等于0直接输出
printf("m=%d,index=%d\n",m,k);
else//没有被代替
cout<<"Not be found";
return 0;
}

 

标签:折半,1.9,更新,mid,high,查找,low,else,指针
From: https://www.cnblogs.com/wsc6/p/17354121.html

相关文章

  • 折半查找
    #include<iostream>#include<algorithm>usingnamespacestd;intmain(){ ios::sync_with_stdio(0); cin.tie(0); intarr[10]={1,56,33,69,84,2,30,99,512,321}; intlow=0,high=9; sort(arr,arr+10); inti,j,k; cout<<"此时数据为:"......
  • 折半查找
    问题描述:N个有序数数列已放在一维数组中,利用二分查找法找整数m在数组中的位置,若找到,则输出其下标值;反之,则输出“Notbefound!".完整程序:#include<stdio.h>#defineN10main(){inti,a[N]={-3,4,7,9,13,45,67,89,100,180},low=0,high=N-1,mid,k=-1,m;printf{"a数组中的数据......
  • 折半查找(二分查找法)
    问题描述:N个有序整数数列已放在一维数组中,利用二分查找法查找整数m在数组中的位置。若找到,则输出其下标值;反之,则输出“Notbefound!”。代码:#include<iostream>#defineN10intmain(){ intk,i0=-1,a[N]={3,12,30,34,45,57,66,78,89,100}; intmid=(N-1)/......
  • 1.9 折半查找
    #include<stdio.h>#defineN10intmain(){inti,a[N]={-3,4,7,9,13,45,67,89,100,180},low=0,high=N-1,mid,k=-1,m;printf("a数组种的数据如下:\n");for(i=0;i<=N;i++)printf("%d",a[i]);printf("\n");......
  • 查找指定字符串在某个字符串中的出现次数
    c语言代码实现:此处)折叠或打开1.#include<stdio.h>2.<string.h>3.intsearchnum(char*str,char*pattern)4.{5.if(str==NULL)6.;7.*pos=NULL;8.intcount=0;9.while((pos=strstr(str,pattern))!=NULL)10.{11.++;1......
  • 信创操作系统--麒麟Kylin桌面版(项目四 文件与目录管理:文件浏览、管理、查找、共享等)
    浏览目录和文件单击任务栏中的【文件管理器图标】即可打开文件管理器,也可单击桌面的【计算机】图标也可进入文件管理器,进入之后即可浏览与查看,如图1-1所示,在【计算机】的页面中,可以单击【本地分区】、【网上邻居】下的相关选项或单击左侧的文件菜单栏,可以进入相对应的文件夹。图1-1......
  • vim中实现全文查找替换确认操作
    我们很多时候会需要某个字符串在文章中某些位置出现时被替换,而其它位置不被替换的有选择的操作,这就需要用户来进行确认::%s/aaa/bbb/g#替换当前文本所有行的aaa为bbb#在命令后面加上一个字母c就可以实现,即::%s/aaa/bbb/gc#顾名思意,c是confirm的缩写  效果: ......
  • 如何在Linux中查找一个文件
    导读对于新手而言,在Linux中使用命令行可能会非常不方便。没有图形界面,很难在不同文件夹间浏览,找到需要的文件。本篇教程中,我会展示如何在Linux中查找特定的文件。第一步要做的是通过SSH连接到你的Linux,在Linux中查找文件有两种方法。一种是使用 find 命令find命令使......
  • 数组的复制、反转、线性查找、二分查找
    publicclassArrayTest2{ publicstaticvoidmain(String[]args){ String[]arr=newString[]{"JJ","DD","MM","BB","GG","AA"}; //数组的复制(区别于数组变量的赋值:arr1=arr) String[]arr1=new......
  • #yyds干货盘点# LeetCode程序员面试金典:在排序数组中查找元素的第一个和最后一个位置
    题目:给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回 [-1,-1]。你必须设计并实现时间复杂度为 O(logn) 的算法解决此问题。 示例1:输入:nums=[5,7,7,8,8,10],target=......