2017北京理工大学上机(二):二分查找
任何疑问、意见、建议请留言公众号:一航代码
题目描述:
原题为给出一个非递减数列,写出一个二分查找算法,输出所查找数值的位置及查找次数。在此替换为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北京理工大学上机(二):二分查找相关推荐
- 【复试】2017北京理工大学上机(一)----身份证校验
一.题目描述: 身份证号的校验身份证号码共18位,最后一位是校验位A[17] aaaaaabbbbbbbbcccd 校验的规则是如下: 前十七位的权值分别是:W[17]:7 9 10 5 8 4 2 ...
- 北理工计算机山东录取分数线,山东省排名多少上北京理工大学?附学校近三年录取分数线...
选择科目 测一测我能上哪些大学 选择科目 领取你的专属报告 > 选择省份 关闭 请选择科目 确定 v> 北京理工大学是北京市内知名高校,拥有教育部评定的材料科学与工程.控制科学与工程.兵器 ...
- python 二分查找函数_Python基础14_递归函数,二分查找
一. 递归 在函数中调用函数本身, 就是递归 prthon中递归的最大深度是998 def func(n): print(n) n += 1 func(n) func(1) 递归的应用:我们可以使用递 ...
- c语言实现二分查找法
目录 一.前言 二.二分查找法 1.什么是二分查找法 2.如何用c语言来实现二分查找法 三.总结 一.前言 假如今天我们需要在一个有序的数组中来寻找一个数的下标,就用"1,2,3,4,5,6 ...
- Java数据结构之二分查找/插值查找/斐波那契查找
目录 一.简单的线性查找 1.问题引出 2.代码实现 二.二分查找算法 1.基本介绍 2.代码实现(递归) 3.代码实现(非递归) 4.二分查找的功能完善 三.插值查找 1.简单介绍 2.代码实现(递 ...
- 顺序查找与哨兵的使用二分查找
查找:根据某个给定关键字X,从集合R中找出关键字与X相同的记录. 数组构成: typedef struct LNode *List; struct LNode{ElementType Data[MAX ...
- tag数组-刷题预备知识-4.一通百通解决二分查找问题
文章目录 1. 二分法查找法的基本思想 2. 二分查找的时间复杂度 3. 二分查找的几个模版 3.1 模板一: 标准的二分查找 3.2 模板二: 二分查找边界(左边界, 右边界, 或是左右边界) 3. ...
- 历年北京理工大学复试上机题
历年北京理工大学计算机复试(上机+专业综合): http://blog.csdn.net/u014552756/article/details/78506072 2000年北理复试上机题 2001年北 ...
- 二十一、二分查找算法(递归非递归)
一.二分查找思路分析 1.首先确定该数组中间的下标 ,即mid=(left+high)/2; 2.然后让需要查找的value值与array[mid]值进行比较 2.1)findVal > arr ...
- [二分查找] 二:二分查找的经典例题
1.何时应该会使用二分查找 当题目中出现有序数组时 当时间复杂度要求为log(n)时 搜索范围可以一次缩小一半时 2. 经典例题1 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果 ...
最新文章
- NHibernate2.1新特性之entity-name
- linux下的动态链接库和静态链接库到底是个什么鬼?(一)静态链接库的编译与使用...
- varnish的服务配置(实验说明)
- VMware linux 克隆机的配置
- ACM-ICPC 2018 徐州赛区网络预赛 Morgana Net
- 不止性能优化,移动端 APM 产品研发技能
- java找不到符号IOException_java:7: 找不到符号
- pythonjava哪个好学_Python和Java哪个好学?没基础学python
- hdu-1823 Luck and Love
- python cnn程序_python cnn训练(针对Fashion MNIST数据集)
- Sqlite查询优化技巧——将LIKE语句转换为比较语句 -转
- 传入一个月份获取该月的统计信息
- 乐优商城遇到的坑(三)之Centos6.5下安装nginx出错
- [机器学习入门] 经典台大李宏毅机器学习课程从这里开始
- 在线文本比较工具-toolfk程序员在线工具网
- iPhone软件KK唱响评测 在线视频比拼歌声
- MATLAB线性回归
- cf1102F. Elongated Matrix(状压dp)
- PostScript 打印机打印内存不足错误消息
- 基于Java实现的Android拼图游戏设计