查找算法(2)--Binary chop--二分查找
时间:2019-09-28
本文章向大家介绍查找算法(2)--Binary chop--二分查找,主要包括查找算法(2)--Binary chop--二分查找使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 二分查找
(1)说明
元素必须是有序的,如果是无序的则要先进行排序操作。
(2)基本思想:
也称为是折半查找,属于有序查找算法。用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功;若不相等,再根据k与该中间结点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束发现表中没有这样的结点。
(3)复杂度分析
最坏情况下,关键词比较次数为log2(n+1),且期望时间复杂度为O(log2n);
注:折半查找的前提条件是需要有序表顺序存储,对于静态查找表,一次排序后不再变化,折半查找能得到不错的效率。但对于需要频繁执行插入或删除操作的数据集来说,维护有序的排序会带来不小的工作量,那就不建议使用。——《大话数据结构》
2.代码
//二分查找(折半查找) public static int binarySearch1(int a[], int value) { int low, high, mid; low = 0; high = a.length - 1; while (low <= high) { mid = (low + high) / 2; if (a[mid] == value) return mid; if (a[mid] > value) high = mid - 1; if (a[mid] < value) low = mid + 1; } return -1; } //二分查找,递归版本:low 表示开始下标,high 表示最后的下标 public static int binarySearch2(int a[], int value, int low, int high) { int mid = low + (high - low) / 2; if (a[mid] == value) return mid; if (a[mid] > value) return binarySearch2(a, value, low, mid - 1); if (a[mid] < value) return binarySearch2(a, value, mid + 1, high); return -1; } public static void main(String[] args) { int[] a = {49, 38, 65, 197, 76, 213, 27, 50}; int num1 = binarySearch1(a, 213); int num2 = binarySearch2(a, 213,0,a.length-1); System.out.println("数组的下标是:" + num1); System.out.println("数组的下标是:" + num2); }
原文地址:https://www.cnblogs.com/yysbolg/p/11603500.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 上盘硬菜,@Transaction源码深度解析 | Spring系列第48篇
- Python--网络编程和并发
- HashMap常见问题(更新中)
- 使用SNVSniffer软件找somatic mutation
- 腾讯云cvm 内存使用率监控指标解读
- Redis常见面试题
- 使用MuSE软件找somatic mutation
- vivo 基于原生 RabbitMQ 的高可用架构实践
- 数据库锁
- 现在单细胞还想“水”CNS恐怕得多组学了
- 7个处理JavaScript值为undefined的技巧
- Python高级知识点
- 三阴性乳腺癌表达矩阵探索之数据下载及理解
- 6种展示代码的工具,你学会了吗?
- 巧用 Ansible 实现配置管理:多环境配置问题