7-60 二分查找法之过程 (10 分)

本题要求使用二分查找法,在给定的n个升序排列的整数中查找x,并输出查找过程中每一步的中间结果。如果数组a中的元素与x的值相同,输出相应的下标(下标从0开始);如果没有找到,输出“Not Found”。如果输入的n个整数没有按照从小到大的顺序排列,或者出现了相同的数,则输出“Invalid Value”。

二分查找法的算法步骤描述如下:

设n个元素的数组a已升序排列,用leftright两个变量来表示查找的区间,即在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]区间继续查找。也就是根据与中间元素比较的情况产生了新的区间值leftright值,当出现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 分)相关推荐

  1. 学习练习 java 二分查找法

    1 package com.hanqi; 2 3 import java.util.*; 4 5 public class Test5 { 6 7 public static void main(St ...

  2. 二分查找法。Java泛型设计二分查找法。

    前言基础: 1.只能针对有序的数组进行查找. 2.时间复杂度为O(logn). 3.使用前可以先排序,然后再查找,广泛应用于当一大组数据需要频繁查找,于是我们先将其进行排序,然后再通过二分查找进行查找 ...

  3. 折半查找算法[二分查找法]算法的实现和解决整数溢出问题~

    算法实现的要求: 折半查找法又称为二分查找法,这种方法对待查找的列表有两个要求: 1:必须采用顺序存储结构 2:必须按关键字大小有序排列 算法思想: 将表中间位置记录的关键字与查找关键字进行比较,如果 ...

  4. java二分查找法_java算法之二分查找法的实例详解

    java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...

  5. java 二分查找_计算机入门必备算法——二分查找法

    1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...

  6. 每天5分钟玩转python3算法:二分查找法

    从今天开始,博主准备开始一段常见算法的学习,算法实现使用Python3,希望坚持下去^_^ alg1:二分查找法 1.运行时间 二分查找相比于依次查找,查询速度提升明显: + 依次查找:O(n) + ...

  7. 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+ ...

  8. 小白的算法初识课堂(part1)--二分查找法

    学习笔记 学习书目:<算法图解>- Aditya Bhargava 二分查找法 算法是一组完成任务的指令,任何代码片段都可视为算法.二分查找是一种算法,其输入是一个有序的元素列表(必须有序 ...

  9. 算法题3 二分查找法

    快速查找:二分查找法 有序数字:3,5,8,10,14,18,19,20,34,58 package com.interview;public class BinarySearch {public s ...

最新文章

  1. 【转】自然语言系列学习之表示学习与知识获取(八)利用远程监督多实例的关系抽取
  2. 腾讯技术直播间 | 走进小程序云开发
  3. 电脑无法连接到系统服务器,请问怎么客户端的电脑连接不到服务器?这是什么原因?...
  4. django09: ORM以及CSRF(旧笔记)
  5. django-正向查找
  6. 自定义loading加载
  7. matlab 局部图放大或缩小
  8. Python_20180421
  9. MeteoInfoLab脚本示例:MODIS Sinusoidal投影HDF数据
  10. 小学三年级计算机基础知识课件,小学三年级信息技术基础知识ppt课件.ppt
  11. 无法安装 Microsoft Visual Studio 2010 Service Pack 1
  12. 基于java的音乐网站的设计与实现
  13. win10 查看电脑mac 地址和ip
  14. 最优化方法-黄金分割法及Matlab实现
  15. 2021HW参考|防守方经验总结
  16. matlab怎么做空间计量,六步学会用MATLAB做空间计量回归详细步骤
  17. postgresql扩展Geometry类型
  18. AUTOSAR 诊断协议栈介绍
  19. 全金属牙冠-市场现状及未来发展趋势
  20. 如何使用 Mac 上自带的「提醒事项」!

热门文章

  1. linux学习查看日志命令
  2. Windows support for hard disks that are larger than 2 TB
  3. elcentro matlab,EL-Centro地震波积分计算与基线调整.docx
  4. Java基础---接口的使用
  5. Linux下socket通信和epoll
  6. ghostwin10系统后不小心重新分区了,其它分区的资料如何找回
  7. linux+jmeter+python基础+抓包拦截
  8. 梦想还是要有的 万一实现了呢
  9. Flutter RotatedBox 旋转组件
  10. Sql中如何将数据表的两个字段的值如何互换?