二分查找法

题目:用二分法在一个有序数列{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 - 二分查找法相关推荐

  1. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...

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

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

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

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

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

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

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

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

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

  7. 二分查找法、顺序查找法

    //二分查找法 第一种方法 function erfen($x,$arr){$count=count($arr);$s=0;$h=$count-1;while ( $s<= $h) {$midd ...

  8. java算法2_二分查找法

    比如现在有个记录名单的字典,里面的名字是按A-Z的顺序排好的,现在我想找Lily这个人.我可以从第一页开始一页一页的翻,但显然这样效率太低了.我可以怎么做呢?首先我直接翻到字典的中间位置,假如发现这里 ...

  9. 二分查找法---java实现

    package com.hbut.test2; public class BinaryFind { public static void main(String[] args) { int arr[] ...

最新文章

  1. linux镜像修改密码,OpenStack 镜像修改密码方案
  2. Android -- View移动的六种方法
  3. 《我和PIC单片机:基于PIC18》——第2章 PIC的开发环境 2.1 PIC开发的硬件资源...
  4. DataSet导出Excel,比以往的方法导出的Excel外观更加好看
  5. art-template-loader:template
  6. HIN2Vec:异质信息网络中的表示学习 | PaperDaily #18
  7. 1.关于QT中json数据处理和密码md5加密
  8. Delphi XE5 for Android (十一)
  9. 算法--背包九讲(详细讲解+代码)
  10. 手把手教程 Sublime Text 删除重复行
  11. OOJ-面向对象编程的三大特点-封装,继承,多态分析与实例
  12. 应用安全-Web安全-漏洞修复方案整理
  13. CSS学习笔记:transition
  14. SqlServer2008R2 完全卸载步骤
  15. 计算机windows8黑屏怎么办,Win8电脑开机黑屏只有鼠标光标怎么解决
  16. 影子系统PowerShadow v2.6.0511中文破解版
  17. 一起talk C栗子吧(第一百零三回:C语言实例--进程间通信大阅兵)
  18. 2021年西式面点师(中级)报名考试及西式面点师(中级)证考试
  19. 一文彻底解决An error occurred while creating the AVD. See idea.log for details问题
  20. 【Python爬虫】你还在纠结选择哪个爬虫库嘛,全都拿来吧你

热门文章

  1. 【STM32 HAL】用旋钮电位器进行PID调参
  2. Sentinel流控效果—Warm Up
  3. 计算机三级信息安全知识点
  4. 基于HTML家乡旅游主题项目的设计与实现——少林寺(5页)HTML+CSSS
  5. 小技巧:如何创建公共邮箱?教育邮箱创建哪个好?
  6. 如何用c语言计算三角形面积
  7. Q1月活大涨70%,后浪会成B站的流量萌新吗?
  8. 算符优先分析java程序_算符优先分析
  9. [php-代码审计]百家cms4.14
  10. jquery获取ip地址