任何疑问、意见、建议请留言公众号:一航代码

题目描述:

原题为给出一个非递减数列,写出一个二分查找算法,输出所查找数值的位置及查找次数。在此替换为PAT6-13 折半查找 (15分)

给一个严格递增数列,函数int Search_Bin(SSTable T, KeyType k)用来二分地查找k在数列中的位置。

函数接口定义:

int Search_Bin(SSTable T, KeyType k);

其中T是有序表,k是查找的值。

裁判测试程序样例:

#include <iostream>
using namespace std;#define MAXSIZE 50
typedef int KeyType;typedef struct
{KeyType key;
} ElemType;typedef struct
{ElemType *R;int length;
} SSTable;void Create(SSTable &T)
{int i;T.R = new ElemType[MAXSIZE + 1];cin >> T.length;for (i = 1; i <= T.length; i++)cin >> T.R[i].key;
}int Search_Bin(SSTable T, KeyType k);int main()
{SSTable T;KeyType k;Create(T);cin >> k;int pos = Search_Bin(T, k);if (pos == 0)cout << "NOT FOUND" << endl;elsecout << pos << endl;return 0;
}/* 请在这里填写答案 */

输入格式:

第一行输入一个整数n,表示有序表的元素个数,接下来一行n个数字,依次为表内元素值。然后输入一个要查找的值。

输出格式:

输出这个值在表内的位置,如果没有找到,输出"NOT FOUND"。

输入样例:

5
1 3 5 7 9
7

5
1 3 5 7 9
10

输出样例:

4

NOT FOUND

解决方法:

(1)算法思想:

画图理解:

(2)代码实现:

可在https://pintia.cn/problem-sets/14/problems/44932判题

#include <iostream>
using namespace std;#define MAXSIZE 50
typedef int KeyType;typedef struct
{KeyType key;
} ElemType;typedef struct
{ElemType *R;int length;
} SSTable;void Create(SSTable &T)
{int i;T.R = new ElemType[MAXSIZE + 1];cin >> T.length;for (i = 1; i <= T.length; i++) //注意这里下标从1开始,到lengthcin >> T.R[i].key;
}int Search_Bin(SSTable T, KeyType k); //声明在定义之前int main()
{SSTable T;KeyType k;Create(T);cin >> k;int pos = Search_Bin(T, k);if (pos == 0)cout << "NOT FOUND" << endl;elsecout << pos << endl;return 0;
}int Search_Bin(SSTable T, KeyType k)
{int left = 1, right = T.length; //注意下标从1开始,下面while循环不带等号。while (left < right){int mid = (left + right) / 2; //注意if (T.R[mid].key < k){left = mid + 1;            //向后二分}else if (T.R[mid].key > k){right = mid - 1;           //向前二分}else if (T.R[mid].key == k){return mid;}}return 0;
}

2017北京理工大学上机(二):二分查找相关推荐

  1. 【复试】2017北京理工大学上机(一)----身份证校验

    一.题目描述: 身份证号的校验身份证号码共18位,最后一位是校验位A[17] aaaaaabbbbbbbbcccd 校验的规则是如下: 前十七位的权值分别是:W[17]:7 9 10 5 8 4 2 ...

  2. 北理工计算机山东录取分数线,山东省排名多少上北京理工大学?附学校近三年录取分数线...

    选择科目 测一测我能上哪些大学 选择科目 领取你的专属报告 > 选择省份 关闭 请选择科目 确定 v> 北京理工大学是北京市内知名高校,拥有教育部评定的材料科学与工程.控制科学与工程.兵器 ...

  3. python 二分查找函数_Python基础14_递归函数,二分查找

    一. 递归 在函数中调用函数本身, 就是递归 prthon中递归的最大深度是998 def func(n): print(n) n += 1 func(n) func(1) 递归的应用:我们可以使用递 ...

  4. c语言实现二分查找法

    目录 一.前言 二.二分查找法 1.什么是二分查找法 2.如何用c语言来实现二分查找法 三.总结 一.前言 假如今天我们需要在一个有序的数组中来寻找一个数的下标,就用"1,2,3,4,5,6 ...

  5. Java数据结构之二分查找/插值查找/斐波那契查找

    目录 一.简单的线性查找 1.问题引出 2.代码实现 二.二分查找算法 1.基本介绍 2.代码实现(递归) 3.代码实现(非递归) 4.二分查找的功能完善 三.插值查找 1.简单介绍 2.代码实现(递 ...

  6. 顺序查找与哨兵的使用二分查找

    查找:根据某个给定关键字X,从集合R中找出关键字与X相同的记录. 数组构成: typedef struct LNode *List; struct LNode{ElementType Data[MAX ...

  7. tag数组-刷题预备知识-4.一通百通解决二分查找问题

    文章目录 1. 二分法查找法的基本思想 2. 二分查找的时间复杂度 3. 二分查找的几个模版 3.1 模板一: 标准的二分查找 3.2 模板二: 二分查找边界(左边界, 右边界, 或是左右边界) 3. ...

  8. 历年北京理工大学复试上机题

    历年北京理工大学计算机复试(上机+专业综合): http://blog.csdn.net/u014552756/article/details/78506072 2000年北理复试上机题 2001年北 ...

  9. 二十一、二分查找算法(递归非递归)

    一.二分查找思路分析 1.首先确定该数组中间的下标 ,即mid=(left+high)/2; 2.然后让需要查找的value值与array[mid]值进行比较 2.1)findVal > arr ...

  10. [二分查找] 二:二分查找的经典例题

    1.何时应该会使用二分查找 当题目中出现有序数组时 当时间复杂度要求为log(n)时 搜索范围可以一次缩小一半时 2. 经典例题1 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果 ...

最新文章

  1. NHibernate2.1新特性之entity-name
  2. linux下的动态链接库和静态链接库到底是个什么鬼?(一)静态链接库的编译与使用...
  3. varnish的服务配置(实验说明)
  4. VMware linux 克隆机的配置
  5. ACM-ICPC 2018 徐州赛区网络预赛 Morgana Net
  6. 不止性能优化,移动端 APM 产品研发技能
  7. java找不到符号IOException_java:7: 找不到符号
  8. pythonjava哪个好学_Python和Java哪个好学?没基础学python
  9. hdu-1823 Luck and Love
  10. python cnn程序_python cnn训练(针对Fashion MNIST数据集)
  11. Sqlite查询优化技巧——将LIKE语句转换为比较语句 -转
  12. 传入一个月份获取该月的统计信息
  13. 乐优商城遇到的坑(三)之Centos6.5下安装nginx出错
  14. [机器学习入门] 经典台大李宏毅机器学习课程从这里开始
  15. 在线文本比较工具-toolfk程序员在线工具网
  16. iPhone软件KK唱响评测 在线视频比拼歌声
  17. MATLAB线性回归
  18. cf1102F. Elongated Matrix(状压dp)
  19. PostScript 打印机打印内存不足错误消息
  20. 基于Java实现的Android拼图游戏设计

热门文章

  1. 01组-选题与需求分析报告
  2. 2021年上半年数据库系统工程师下午真题及答案解析
  3. 小米抢购软件_「晓满晓满晓」今日科技新鲜事:小米11、鸿蒙os、摩拜单车
  4. ppsspp java模拟_jar模拟器 免费版|java程序模拟软件
  5. 百度文库的内容怎么复制粘贴下来呢,look
  6. Steam Roller UVALive - 4128
  7. 国科大学习资料--操作系统(杨力祥)--2017年思考题
  8. HTML+CSS实现小米账号注册界面
  9. 毕业设计 嵌入式超声波雷达可视化系统
  10. 【韦东山嵌入式Linux】Linux命令入门笔记