BinarySearch 有序表的二分查找

思路:
前提是线性表采用顺序存储(通常从小到大),然后在有序表中取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若小于,则在中间记录的左半区继续查找;若大于,在中间记录的右半区继续查找 。

注:时间复杂度为O(logn),远远好于顺序查找的O(n)。

代码实现:

//BinarySearch 有序表的二分查找
#include <iostream>
using namespace std;int BinarySearch(int *p, int n, int key){int low, high, mid;low = 0;high = n - 1;while (low < high){mid = (low + high) / 2;if (key < *(p + mid)){//若小于中间值,则high=mid-1high = mid - 1;}else if (key>*(p + mid)){//若大于中间值,则low=mid+1low = mid + 1;}else{//若给定值与中间记录的关键字相等,则查找成功return mid;}}
}int main(){int a[] = { 1, 16, 24, 35, 47, 59, 62, 73, 88, 99 };int *p = a;int aSize = sizeof(a) / sizeof(a[0]);//计算数组sizeint key;//输入的要查找的数int result;//返回的找到的数的下标,如果不是则为任意值cout << "Please input the number you want to search:";cin >> key;result=BinarySearch(p, aSize, key);if (key == a[result]){cout << "在a[" << result << "]找到" << key << endl;}else{cout << "没找到" << key << endl;}return 0;
}

运行结果:

BinarySearch 有序表的二分查找相关推荐

  1. 对长度为200的有序表进行二分查找_程序员常用的查找算法(顺序、二分、插值、分块、斐波那契)...

    顺序查找 基本思想 属于线性查找和无序查找,从一端开始顺序扫描,直到找到与目标值value相等的元素. 这是最基本的查找方法,也是时间复杂度最高的查找算法. 在数据过多时,这种方法并不适用. 代码实现 ...

  2. 顺序有序表进行二分查找

    设置low在有序表最左边,high在最右边,mid为(low+high)/2;取中间位置, 当mid的值等于k,返回第mid+1个(从0开始) 当mid的值大于k,从mid左边开始找,令high=mi ...

  3. lintcode-106-排序列表转换为二分查找树

    106-排序列表转换为二分查找树 给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树 样例 标签 递归 链表 思路 类似于二分查找,每次将链表二分,中间节点作为根节点,在建立左子树 ...

  4. 查找技术:有序表的对分查找(折半查找)类

    一 查找技术相关总结: 1.顺序查找:(1)如果线性表为无序表(即表中元素的排序是无序的),则不管是顺序存储结构还是链式存储结构,都只能用顺序查找:(2)即使是有序线性表,如果采用链式存储结构,也只能 ...

  5. 【C语言函数3.2】写一个函数,实现一个整形有序数组的二分查找代码

    写一个函数,实现一个整形有序数组的二分查找代码 #include <stdio.h>int binary_search(int a[], int k, int s) {int left = ...

  6. redis跳跃表与二分查找

    一 前言 本篇内容主要是讲解redis跳跃表的基础概念,科普一下读者知道有这种随机数据结构的概念,. 公众号:知识追寻者 知识追寻者(Inheriting the spirit of open sou ...

  7. 有序数组二分查找java_详解Java数据结构和算法(有序数组和二分查找)

    一.概述 有序数组中常常用到二分查找,能提高查找的速度.今天,我们用顺序查找和二分查找实现数组的增删改查. 二.有序数组的优缺点 优点:查找速度比无序数组快多了 缺点:插入时要按排序方式把后面的数据进 ...

  8. leetcode167. 两数之和 II - 输入有序数组(二分查找)

    给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明: 返回的下标值 ...

  9. 二分法查找是基于有序_【二分查找】May1th “First Bad Version (Python3)”

    " 五月,总结模板的日子."Day 1  --  First Bad Version首个坏"蛋"问题描述You are a product manager an ...

最新文章

  1. QT_QSlider的总结
  2. DataFrame 拼接,筛选,修改
  3. 大型网站技术架构:核心原理与案例分析阅读笔记二
  4. Albert: A lite bert for self-supervised learning of language representations (Albert)
  5. 上云有风险 公有云选型小心进坑
  6. 检测到在集成的托管管道模式下不适用的 ASP.NET 设置, HTTP 错误 500.23 解决方案...
  7. 国家开放大学2021春1338幼儿园教育质量评价题目
  8. FPGA系统时间戳偶尔异常分析及定位
  9. 在java中如何把字符串转换成时间格式?
  10. Gstreamer之pts/dts(十九)
  11. 04号团队-团队任务3:每日立会(2018-11-28)
  12. python绘制散点图,非常全,非常详细(已验证)
  13. web前端入门到实战:CSS box-sizing属性的正确用法
  14. 和画意思相近的字_有没有类似“鸢语慕君年青筏画卿颜”这种古风情侣网名啊...
  15. win7桌面上显示html,win7如何在桌面显示ie图标|win7在桌面显示ie图标两种方法
  16. 当我开始学微信公众号开发时,我要学什么?
  17. excel单元格斜线_个人永久性免费-Excel催化剂功能第74波-批量排版格式利器,瞬间美化表格...
  18. python 清华教程_清华推出 1564集Java Python视频教程,别再说找不到适合的教程了...
  19. 使用ffmpeg转码MP4至m3u8格式并切片,以及自动检测切片m3u8脚本编写
  20. mybatis入门笔记(一)

热门文章

  1. java 数据结构 数据库_数据库索引背后的数据结构
  2. 佳能相机CR2转TIFF
  3. MySQL:备份数据库脚本报错mysqldump: Couldn‘t execute ‘SELECT COLUMN_NAME****
  4. C++:类的构造函数
  5. RabbitMQ集群并处理失败
  6. 中易广告联盟v9/黑色高端/模板 团队介绍网站
  7. 泊松分布的期望和方差_表白不怕白努力,几何分布来帮忙
  8. 有点火的程序秒收录牛X
  9. SpringCloud Hoxton版微服务- Ribbon实现负载均衡
  10. CC.Net 全接触系列之二: CCRC.Net : CC.Net 的一种另类使用方式