7-60 二分查找法之过程 (10 分)
7-60 二分查找法之过程 (10 分)
本题要求使用二分查找法,在给定的n个升序排列的整数中查找x,并输出查找过程中每一步的中间结果。如果数组a中的元素与x的值相同,输出相应的下标(下标从0开始);如果没有找到,输出“Not Found”。如果输入的n个整数没有按照从小到大的顺序排列,或者出现了相同的数,则输出“Invalid Value”。
二分查找法的算法步骤描述如下:
设n个元素的数组a已升序排列,用left
和right
两个变量来表示查找的区间,即在a[left] 〜 a[right]
区间去查找x。初始状态为left = 0,right = n-1
。首先用要查找的x与查找区间的中间位置元素a[mid]
(mid = (left + right) / 2
)比较,如果相等则找到;如果x < a[mid]
,由于数组是升序排列的,则只要在a[left] 〜 a[mid-1]
区间继续查找;如果x > a[mid]
,则只要在a[mid+1] 〜 a[right]
区间继续查找。也就是根据与中间元素比较的情况产生了新的区间值left
、right
值,当出现left > right
时,说明不存在值为x的元素。
输入格式:
输入在第1行中给出一个正整数n(1≤n≤10)和一个整数x,第2行输入n个整数,其间以空格分隔。题目保证数据不超过长整型整数的范围。
输出格式:
在每一行中输出查找过程中对应步骤的中间结果,按照“[left,right][mid]”的格式输出。提示:相邻数字、符号之间没有空格。
如果找到,输出相应的下标(下标从0开始);如果没有找到,在一行中输出“Not Found”。
如果输入的n个整数没有按照从小到大的顺序排列,或者出现了相同的数,则输出“Invalid Value”。
输入样例1:
10 2
1 2 3 4 5 6 7 8 9 10
结尾无空行
输出样例1:
[0,9][4]
[0,3][1]
1
结尾无空行
输入样例2:
4 5
71 74 78 100
结尾无空行
输出样例2:
[0,3][1]
[0,0][0]
Not Found
结尾无空行
输入样例3:
5 5
39 60 80 80 100
结尾无空行
输出样例3:
Invalid Value
结尾无空行
#include<iostream>
#include<algorithm>
using namespace std;
int main(){int n,x,flag1=0,flag2=0,flag3=0;cin>>n>>x;int a[n],b[n];for(int i=0;i<n;i++){cin>>a[i];b[i]=a[i];}sort(a,a+n);for(int i=0;i<n;i++){if(a[i]!=b[i]){flag1=1;break;}}for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(a[i]==a[j]&&i!=j){flag2=1;break;}}}if(flag1||flag2)cout<<"Invalid Value";else{int l=0,r=n-1;while(l<=r){int mid=(l+r)/2;printf("[%d,%d][%d]\n",l,r,mid);if(a[mid]==x){printf("%d",mid);flag3=1;break;}else if(x>a[mid]){l=mid+1;}else {r=mid-1;}}if(!flag3)cout<<"Not Found\n";}return 0;
}
7-60 二分查找法之过程 (10 分)相关推荐
- 学习练习 java 二分查找法
1 package com.hanqi; 2 3 import java.util.*; 4 5 public class Test5 { 6 7 public static void main(St ...
- 二分查找法。Java泛型设计二分查找法。
前言基础: 1.只能针对有序的数组进行查找. 2.时间复杂度为O(logn). 3.使用前可以先排序,然后再查找,广泛应用于当一大组数据需要频繁查找,于是我们先将其进行排序,然后再通过二分查找进行查找 ...
- 折半查找算法[二分查找法]算法的实现和解决整数溢出问题~
算法实现的要求: 折半查找法又称为二分查找法,这种方法对待查找的列表有两个要求: 1:必须采用顺序存储结构 2:必须按关键字大小有序排列 算法思想: 将表中间位置记录的关键字与查找关键字进行比较,如果 ...
- java二分查找法_java算法之二分查找法的实例详解
java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...
- java 二分查找_计算机入门必备算法——二分查找法
1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...
- 每天5分钟玩转python3算法:二分查找法
从今天开始,博主准备开始一段常见算法的学习,算法实现使用Python3,希望坚持下去^_^ alg1:二分查找法 1.运行时间 二分查找相比于依次查找,查询速度提升明显: + 依次查找:O(n) + ...
- java for循环和数组--冒泡排序、二分查找法
//100以内与7相关的数 for(int a=1;a<=100;a++){ if(a%7==0||a%10==7||a/10==7){ System.out.print(a+ ...
- 小白的算法初识课堂(part1)--二分查找法
学习笔记 学习书目:<算法图解>- Aditya Bhargava 二分查找法 算法是一组完成任务的指令,任何代码片段都可视为算法.二分查找是一种算法,其输入是一个有序的元素列表(必须有序 ...
- 算法题3 二分查找法
快速查找:二分查找法 有序数字:3,5,8,10,14,18,19,20,34,58 package com.interview;public class BinarySearch {public s ...
最新文章
- 【转】自然语言系列学习之表示学习与知识获取(八)利用远程监督多实例的关系抽取
- 腾讯技术直播间 | 走进小程序云开发
- 电脑无法连接到系统服务器,请问怎么客户端的电脑连接不到服务器?这是什么原因?...
- django09: ORM以及CSRF(旧笔记)
- django-正向查找
- 自定义loading加载
- matlab 局部图放大或缩小
- Python_20180421
- MeteoInfoLab脚本示例:MODIS Sinusoidal投影HDF数据
- 小学三年级计算机基础知识课件,小学三年级信息技术基础知识ppt课件.ppt
- 无法安装 Microsoft Visual Studio 2010 Service Pack 1
- 基于java的音乐网站的设计与实现
- win10 查看电脑mac 地址和ip
- 最优化方法-黄金分割法及Matlab实现
- 2021HW参考|防守方经验总结
- matlab怎么做空间计量,六步学会用MATLAB做空间计量回归详细步骤
- postgresql扩展Geometry类型
- AUTOSAR 诊断协议栈介绍
- 全金属牙冠-市场现状及未来发展趋势
- 如何使用 Mac 上自带的「提醒事项」!
热门文章
- linux学习查看日志命令
- Windows support for hard disks that are larger than 2 TB
- elcentro matlab,EL-Centro地震波积分计算与基线调整.docx
- Java基础---接口的使用
- Linux下socket通信和epoll
- ghostwin10系统后不小心重新分区了,其它分区的资料如何找回
- linux+jmeter+python基础+抓包拦截
- 梦想还是要有的 万一实现了呢
- Flutter RotatedBox 旋转组件
- Sql中如何将数据表的两个字段的值如何互换?