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

折半查找

时间:2023-04-18 20:01:17浏览次数:30  
标签:折半 下标 int 中位数 整数 cin 查找

1.问题描述:用二分法查找一段有序数组中的某个整数,输出其下标,如果没找的这输出“Not be found”

2.问题分析:分析问题知这个问题分为三部分:(1)输入N个整数(2)将这N个整数进行排序(3)使用二分法进行查找;

3.算法设计:先输入一个整数N,用vector函数来储存这N个整数,用algorithm函数库中的sort()函数来将vector中的元素快速排序,用i来记录小的下标,j来记录大的下标,每一次都判断这个【i,j】区间内的中位数与目标整数p的关系,如果中位数大于p则将边界j进行缩小使其等于区间中位数,如果中位数小于p,则将边界i进行缩小,使其等于中位数。如果这个区间内的中位数等于p则输出改下标即(i+j)/2并用break跳出循环;如果i与j仅相差1,则表示没有找到p,输出“Not be found”,并用break跳出循环;

4.源代码:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{

int N;
int p;
cin >> N ;
vector <int>m;
for (int i = 0; i < N; i++)
{
int k;
cin >> k;
m.push_back(k);
}
cin >> p;
sort(m.begin(), m.end());

for (int i=0,j=N-1;;)
{
if (m[(j+i)/ 2] > p)
{
j =( j + i) / 2;
}
if (m[(j + i) / 2] < p)
{
i = (j + i) / 2;
}
if (m[(j + i) / 2] == p) { cout << (j + i) / 2 << endl; break; }
if(j-1==i) { cout << "Not be found." << endl; break; }
}
return 0;
}

标签:折半,下标,int,中位数,整数,cin,查找
From: https://www.cnblogs.com/Snor9/p/17330886.html

相关文章

  • day 9 二分查找
     1.输入一组有序数列;2.每次查找序列的中间位置并与目标数比较;3.依据比较缩小数列,直到找到目标数或数列长度为1;4.输出; #include<iostream>usingnamespacestd;intn,t,flag;inta[100];intf(intl,intr){while(l<r){intmid=l+r>>1;if(a[......
  • STATA 遍历查找
    sscinstallelabel,replacesysuseauto,clearused:\statashu\2\cgss2015,clearforeachvofvarlist_all{cap:sdecode`v',replace}usecgss2015-2,replacelocalk=_Nforeachvarofvarlist_all{locala:varlabel`var'//disp&qu......
  • 二分查找
    给定一个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,1......
  • 【LBLD】常数时间删除-查找数组中的任意元素
    常数时间删除-查找数组中的任意元素380.O(1)时间插入、删除和获取随机元素classRandomizedSet{private:vector<int>nums;unordered_map<int,int>num2index;public:RandomizedSet(){srand(time(0));}boolinsert(intval){......
  • 查找自己农历生日与公历生日在同一天的年份
    #请先使用命令pipinstallsxtwl安装依赖库后,再执行以下脚本importsxtwlymc=["正","二","三","四","五","六","七","八","九","十","冬","腊"]rmc=[&quo......
  • 查找消耗cpu最高的Java进程
    #!/bin/bashif[-z"$1"];then###1.先找到消耗cpu最高的Java进程###pid=`ps-eopid,%cpu,cmd--sort=-%cpu|grepjava|grep-vgrep|head-1|awk'END{print$1}'`if["$pid"=""];then......
  • linux系统查找文件命令find,xargs
    FIND命令形式:findpathname-options[-print-exec-ok]pathname要查找的路径(.表示当前目录,/表示系统根目录)-print输出-exec 对匹配的文件执行该参数所给出的shell命令-execrm{}\;注意{}和\;之间的空格-ok以一种更为安全的模式来执行shell命令find命令有很多选项或表达式,每一......
  • 二分查找
    经典二分查找,给定一个升序的整形数组nums和一个目标值target,查找target在nums中的位置,如果目标值存在返回下标,否则返回-1publicclassSolution{publicintSearch(int[]nums,inttarget){returnBinarySearch(nums,0,nums.Length-1,target);}......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之004 week01 02-04 使用泛型实现线性
    1、算法描述在数组中逐个查找元素,即遍历。2、上一篇文的实现结果在扎实打牢数据结构算法根基,从此不怕算法面试系列之003week0102-03代码实现线性查找法中,我们实现了如下代码:packagecom.mosesmin.datastructure.week01.chap02;/***@Misson&Goal代码以交朋友、传福音......
  • 如何对数据透视表的数据进行查找
    问题:如果对数据透视表中的数据进行查找,例如找到每个店员和店铺对应的服务费。函数解决:直接对数据透视表的数据源进行多条件求和。=SUMIFS(C:C,A:A,H2,B:B,I2)更改数据透视表布局后再用Sumifs或查找函数: ......