折半查找(二分查找)

1、折半查找法,也称为二分查找法, 二分搜索, 是一种在有序数组中查找某一特定元素的搜索算法.搜索过程中从数组的中间元素开始, 如果中间元素正好是要查找的元素, 则搜索过程结束;如果某一特定元素大于或者小于中间元素, 则在数组大于或小雨元素的那一半中查找, 而且跟开始一样从中间元素开始比较. 若某1个步骤中数组为空, 则代表找不到. 这种搜索算法每一次比骄傲都使搜索范围缩小一半.这种方法对待查找的列表有两个要求

  • 必须采用顺序存储结构
  • 必须按关键字大小有序排列

2、折半查找法分析
从定义中可以看出折半查找法有几个特性.
(1) 先决条件: 要搜索的数据已经排好序
当然, 怎样将数据排序也是1个算法, 这里先不考究了, 但是要使用折半查找法, 这个条件是必需满足的
(2) 折半查找法适合海量数据查找
折半查找法每执行1次.就会抛弃一半的无用数据, 如果数据很少的话,其实比线性查找快不了多少, 但是数据量很大的话, 抛弃的一半无用数据就很客观了! 相对于线性查找中节省了这一半数据的遍历时间啊.
(3) 折半查找法算法复杂度
假如要查找数据的数量是n, 查找的次数为x,那么查找1次(x=1), 剩下的数据量就是 (n-1)/2 = n/2 -1/2了
当x=2 时 剩下的数据量就是 n/4 - 3/4
当x=3 时 剩下的数据量就是 n/8 - 7/8
所以剩下的数据量R = n/2^x - 1 + 1/2^x
当x很大时, R就~= n/2^x -1 了
那么什么时候才会肯定会找出要找的数据呢, 或者缺认该数据不存在呢.
就是当剩余的数据量R=0 时啊.
这时 n/2^x -1 =0 => 2^x = n => x= log2^n (底为2,幂为n的对数)
所以算法复杂度就是 O(log2^n)
比起线性查找的算法复杂度O(n) , 优胜很多了.(如果n很大的话)
3、具体代码实现:


#include<stdio.h>
int main()
{int array[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };int left = 0,right = 9;int mid = 0;int x = 0;printf("%d\n", x);while (left <= right){mid = (left + right) / 2;if (x < mid){right = mid;//还会有在此处为right=mid-1;这样的输入,两种输入相同}else if (x > mid){left = mid+1;}else {printf("找到%d了\n", x);break;}}
}

折半查找(二分查找)相关推荐

  1. 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)

    目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...

  2. C语言之折半查找(二分查找)

    一.什么是折半查找? 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中 ...

  3. Java实现折半查找(二分查找)的递归和非递归算法

    Java二分查找实现,欢迎大家提出交流意见. /** *名称:BinarySearch *功能:实现了折半查找(二分查找)的递归和非递归算法. *说明: *     1.要求所查找的数组已有序,并且其 ...

  4. Python查找-二分查找

    Python查找-二分查找 二分查找 折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务. 它的基本思想是,将n个元素分成个数大致相 ...

  5. 【Golang第6章:排序和查找】golang怎么排序,golang的顺序查找和二分查找,go语言中顺序查找二分查找介绍和案例

    介绍 这个是在B站上看边看视频边做的笔记,这一章是GO语言的排序和查找 有golang怎么排序,golang的顺序查找和二分查找,go语言中顺序查找二分查找介绍和案例,具体请看[文章目录] 配套视频自 ...

  6. C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】

    目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...

  7. 数据结构 | 折半查找 /二分查找 算法细节、二分查找判定树

    一.基本思想 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步 ...

  8. 理论基础 —— 查找 —— 二分查找

    [概述] 二分查找又称折半查找,其要求线性表中的记录必须按关键码有序,且必须采用顺序存储. 其基本思想是:用给定值 k 先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功:若不相 ...

  9. 冒泡排序 | 快速排序 | 线性查找 | 二分查找等

    目录 排序算法:冒泡排序 排序算法:快速排序 数组的复制.反转.查询(线性查找.二分查找) 排序算法:冒泡排序 public static void main(String[] args){int[] ...

  10. Java数据结构与算法——线性查找 二分查找 插值查找

    1.线性查找 有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称[顺序查找] 要求: 如果找到了,就提示找到,并给出下标值. package com.szh. ...

最新文章

  1. mustache 渲染文本一直渲染不出来
  2. mysql模糊查询的优化方法--亲自实践
  3. log4j.logger java_java – Log4JLogger的根本原因是找不到还是不可用?
  4. 鸿蒙荣耀x10max,荣耀X10 Max有秘密武器:5G大屏手机能比4G还省电
  5. Upma Xmac 测试 03
  6. VMware通过vmdk文件创建虚拟机
  7. 秦九韶算法matlab实验报告,数值分析上机实验报告.doc
  8. 华为鸿蒙系统可能,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  9. linux pro*c环境配置,Pro*C 环境配置(RedHat +Oracle 10g)
  10. Windows Server 2008 R2入门之FTP服务器
  11. tomcat8和tomcat7性能比较
  12. Android Textview控件基础属性
  13. JAVA基础知识点大全之一
  14. 2021年连云港高考成绩查询,2021年连云港高考状元是谁分数多少分,历年连云港高考状元名单...
  15. 力扣每日一题(九——保持城市天际线)
  16. 解决vscode下载速度太慢的问题
  17. Sputtr--万能搜索引擎
  18. 通达信经典实用选股公式
  19. Kali HTTrack演示-渗透测试察打一体(1)
  20. VUE定时器,用于登陆获取验证码倒计时

热门文章

  1. Redis超实用性命令组合
  2. 爬虫代理淘宝反爬基础(1)
  3. ubuntu中解压.tgz
  4. 1天100万件包裹,就是干!
  5. linux卸载和按照jdk,Linux 下安装和卸载JDK
  6. 2022-2028全球与中国塑料金属化服务市场现状及未来发展趋势
  7. Android AIDL参数中in、out、inout、oneway含义及区别
  8. HTTP的Referrer和Referrer Policy介绍
  9. 苹果正式发布iOS 8.3,修复漏洞,性能提升
  10. 前端几种禁用情况(鼠标事件)