PTA - 二分查找法
二分查找法
题目:用二分法在一个有序数列{1,2,3,4,5,6,7,8,9,10}中查找key值,若找到key则输出其在数组中对应的下标,否则输出not found。
输入格式:
直接输入一个要查找的正整数key。没有其它任何附加字符。
输出格式:
找到则在一行中按照“weizhi:下标”的格式输出其在数组中对应的下标,否则输出not found。
输入样例1:
4
输出样例1:
weizhi:3
输入样例2:
15
输出样例2:
not found
#include <iostream>using namespace std;int BinarySearch(int *p, int n, int x);int main()
{int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int x;cin >> x;int m;m = BinarySearch(a, 10, x);if (m >= 0)cout << "weizhi:" << m;elsecout << "not found";
}int BinarySearch(int *p, int n, int x)
{int low, mid, high; low = 0; high = n - 1;while (low <= high){mid = (low + high) / 2;if (x == p[mid]) return mid;else if (x < p[mid])high = mid - 1;elselow = mid + 1;}return -1;
}
小结:
二分查找 ——Binary Search
一、含义: 二分查找也称 折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。时间复杂度:O(log2n)
二、代码实现
int BinarySearch(int *p, int n, int x) // n代表数组元素的个数, 查找的数为X
{int low, mid, high; // 区间上,下界及中间值 low = 0; high = n - 1;// 循环判定条件:合理的查找范围while (low <= high){mid = (low + high) / 2; // 为了防止数值溢出if (x == p[mid]) // *(p + mid) 等价于 p [mid] return mid;else if (x < p[mid])high = mid - 1;elselow = mid + 1;}return -1; // -1代表没找到
}
注:
循环判定条件:low <= high
为了防止数值溢出:mid = (low + high) / 2;
当p[mid]
不等于x
时,high = mid - 1;
或low = mid + 1;
PTA - 二分查找法相关推荐
- javascript数据结构与算法---检索算法(二分查找法、计算重复次数)
javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...
- 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+ ...
- 学习练习 java 二分查找法
1 package com.hanqi; 2 3 import java.util.*; 4 5 public class Test5 { 6 7 public static void main(St ...
- 二分查找法、顺序查找法
//二分查找法 第一种方法 function erfen($x,$arr){$count=count($arr);$s=0;$h=$count-1;while ( $s<= $h) {$midd ...
- java算法2_二分查找法
比如现在有个记录名单的字典,里面的名字是按A-Z的顺序排好的,现在我想找Lily这个人.我可以从第一页开始一页一页的翻,但显然这样效率太低了.我可以怎么做呢?首先我直接翻到字典的中间位置,假如发现这里 ...
- 二分查找法---java实现
package com.hbut.test2; public class BinaryFind { public static void main(String[] args) { int arr[] ...
最新文章
- linux镜像修改密码,OpenStack 镜像修改密码方案
- Android -- View移动的六种方法
- 《我和PIC单片机:基于PIC18》——第2章 PIC的开发环境 2.1 PIC开发的硬件资源...
- DataSet导出Excel,比以往的方法导出的Excel外观更加好看
- art-template-loader:template
- HIN2Vec:异质信息网络中的表示学习 | PaperDaily #18
- 1.关于QT中json数据处理和密码md5加密
- Delphi XE5 for Android (十一)
- 算法--背包九讲(详细讲解+代码)
- 手把手教程 Sublime Text 删除重复行
- OOJ-面向对象编程的三大特点-封装,继承,多态分析与实例
- 应用安全-Web安全-漏洞修复方案整理
- CSS学习笔记:transition
- SqlServer2008R2 完全卸载步骤
- 计算机windows8黑屏怎么办,Win8电脑开机黑屏只有鼠标光标怎么解决
- 影子系统PowerShadow v2.6.0511中文破解版
- 一起talk C栗子吧(第一百零三回:C语言实例--进程间通信大阅兵)
- 2021年西式面点师(中级)报名考试及西式面点师(中级)证考试
- 一文彻底解决An error occurred while creating the AVD. See idea.log for details问题
- 【Python爬虫】你还在纠结选择哪个爬虫库嘛,全都拿来吧你