`
andyivy6
  • 浏览: 18351 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

算法初步之二分法查找

阅读更多

从来没有认真学过数据结构,也没写过什么像样的算法,注定我的程序员之路走的很艰辛,是该改变的时候,所以,接下来的时间里会从最基础开始学起,每天一点一点的积累,希望能有所收获,加油,为自己加油。

 

二分法查找

这个方法最常用于猜数字游戏中,比如同伴预先指定一个1~100之间的数字,要你去猜这个数字是多少,当你猜一个数字之后,你的同伴会告诉你这个数字是大了还是小了或者说猜对了,如果你采用乱蒙的方式,或者采用线性查找的方式,也许你运气很好,会一次或者两次猜中,但是如果运气很差的话就不能保证了。而采用二分法查找的方式猜1~100之间的数字,你最多猜7次就能完成,这就是二分法的优势,具体的代码实现如下。

public int myFind(int searchKey){
	int min  = 0; 
	int max = nElems - 1;//nElems 数组的长度
	int current ;
	while(true){
		current = (min + max)/2;
		//a为 int[] 数组	
		if(a[current] == searchKey){
			return current; //返回当前的下标值
		}else if(min>max){
			return nElems; //如果min大于了max证明没有查找到,则返回数组长度
		}else if(a[current] >searchKey){
			max = current-1;
		}else if(a[current] <searchKey){
			min = current+1;
		}
			
		}
	}

 当然这样做的前提是该数组是有序数组,如果没有经过排序的数组这样操作,结果是可想而知的。

 

另外有序数组采用二分法查询效率很高,但是删除插入很慢,因为要删除和插入会使删除和插入数据的后面需要移动。

 

再另:二分法在数组长度较短的时候可能体现不出优势,但是当数组长度越长的时候他的优势越明显。比如0~1000,如果是线性查找的话是500次,而二分法查找则最多只需要10次。10000是14次,100000是17次……至于这最多次数是怎么算出来的,大家可以想想我们怎么查找的。我们是按2的n次幂进行查找的,2的7次幂是128,2的10次幂是1024……。OK,现在大家应该明白二分法查找的效率在数组长度越长的时候的效率越高的原因了吧,嘿嘿,抛砖引玉

 

 

再再另:数组的缺点:大小在初始化的时候就固定了,如果数据没有超过数组的大小,则出现空间浪费,如果超过了又会内存溢出;有序数组查询快速,但插入和删除又慢;无序数组插入快,但查找慢,这些都是数组的一些缺点。

 

 

看了的觉得很小儿科的请手下留情,如有不足请指正,谢谢

(参考《Java数据结构和算法》)

分享到:
评论

相关推荐

    高一数学算法初步基础训练[精选].doc

    在高中数学的学习中,算法初步是一个重要的概念,它涉及到如何用明确、有限的步骤解决特定问题的方法。这个基础训练文档主要是针对高一学生设计的,旨在帮助他们理解和掌握算法的基本概念和应用。以下是对相关知识点...

    必修3算法初步练习题及答案.doc

    【算法初步】 算法是解决问题或执行任务的一系列明确、有序的步骤,它具有抽象性、精确性、有穷性和确定性四大特征。抽象性意味着算法可以独立于任何特定的计算机或编程语言;精确性指的是每一步骤都有清晰的定义,...

    高一数学算法初步测试卷.doc

    【算法初步知识点】 1. **数据交换**:在第一题中提到了两个数的交换,这是编程中最基本的操作之一。通常使用临时变量辅助完成交换,例如 `temp = a; a = b; b = temp;`。然而,在某些编程语言中(如Python),可以...

    苏教版必修三第1章 算法初步作业题及答案解析12套精选.docx

    总结:本章"算法初步"主要涵盖了算法的基本概念、流程图和伪代码的使用、常见算法结构(顺序、选择、循环),以及具体算法的应用,如二分法、变量交换、最大公约数计算、循环次数的确定、数学计算和方程求解等。...

    【名师一号】2020学年高中数学 第二章 算法初步单元同步测试(含解析)北师大版必修3.doc

    【高中数学 第二章 算法初步】是高中数学必修3中的重要内容,主要涉及算法的基本概念、特征以及常见的算法应用。以下是对这一章节知识点的详细解释: 1. **算法的基本特征**: - 确定性:算法的每一步骤必须明确...

    第一章 算法初步测试题(B组).doc

    【算法初步测试题(B组)】的文档涵盖了算法的基础知识,包括输入输出、逻辑判断、数值转换、程序设计等核心概念。以下是对这些知识点的详细解释: 1. **输入输出**: - 在编程中,`INPUT` 用于从用户获取输入,而 `...

    苏教版必修三第1章 算法初步作业题及答案解析12套23精选.docx

    【算法初步】 在计算机科学中,算法是解决问题或执行任务的精确步骤序列。本题主要涉及了三种经典的算法:孙子剩余定理、辗转相除法(欧几里得算法)以及二分法。 1. **孙子问题**,也称为中国剩余定理,是一个关于...

    苏教版必修三第1章 算法初步作业题及答案解析12套13精选.docx

    2. **二分法求解**:二分法是一种在有序数组中查找特定元素或求解方程近似解的高效算法,通常涉及顺序结构、选择结构和循环结构的组合。 3. **变量交换**:在编程中,交换两个变量的值通常需要借助第三个临时变量...

    算法设计与分析二分查找实验报告.doc

    算法设计与分析二分查找实验报告 本实验报告的主要目的是设计和实现二分查找程序,以提高教学效果,增强学生实践动手能力。二分查找是计算机科学与技术专业的软件方向的必修课,具有较强的理论性和实践性。 一、...

    2020_2021学年高中数学第二章算法初步单元素养评价含解析北师大版必修3202103041118

    【算法初步】 在高中数学的算法初步章节中,学习的主要目标是理解并掌握如何用一系列有序步骤来解决特定问题。算法是解决数学问题或执行特定任务的明确指令集,通常涉及逻辑判断和数据处理。 1. **算法的定义与特征...

    用二分法求方程的近似解48558PPT学习教案.pptx

    【二分法求方程近似解】是高中数学中的一个重要知识点,主要涉及函数与方程的关联,算法思想的初步引入,以及逼近数学思想的运用。二分法,也称为折半查找法,是一种在特定区间内寻找方程根的有效方法。在教学过程中...

    Lmne.rar_数值算法/人工智能

    "v79二分法与统计问题(线段树).doc"可能讨论了线段树与二分查找的结合,以及如何利用线段树处理统计类问题;"np1树结构在程序设计中的运用.ppt"则可能扩展到其他树结构在程序设计中的应用,如二叉搜索树、平衡树等...

    南开大学 ACM 内部 讲义

    二分法,也称为折半查找,是一种在有序数组中查找特定元素的高效算法。它通过不断缩小搜索范围,将问题规模减半,直到找到目标值或确定其不存在。二分法不仅用于查找,还常用于优化问题,如求解最接近的元素、查找...

    计算机二级公共基础知识

    顺序查找法每一次比较,只将查找范围减少1,而二分法查找,每比较一次,可将查找范围减少为原来的一半,效率大大提高。 对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较log2n次, 二级公共...

    1D1D动态规划优化初步

    根据决策单调性,可以使用二分法来查找“转折点”,即决策变化的位置。 3. **维护栈**:使用一个栈来维护数据,栈中的每个元素保存一个决策的起始位置与终了位置。当插入一个新的决策时,从后到前扫描栈,对于每一个...

    浙江省高校计算机等级考试大纲(二级——C语言程序设计大纲)

    * 检索(查找)算法:包括无序数据序列的查找和有序数据序列的查找(二分法)。 * 遍历算法:包括一维数组和二维数组的遍历、单向链表的遍历、文件的遍历等。 本大纲旨在培养高校学生的计算机编程能力和解决问题...

    高中数学教学案例.docx

    3. **学生基础**:学生已学习过函数,理解函数零点和方程根的关系,具备函数与方程的初步转化思想,但可能在处理高次方程和超越方程时遇到困难,对算法程序和求近似解的经验不足。 4. **设计思想**:教学强调学生...

    C语言设计相关

    5. **二分法查找算法代码.rar**:二分查找是高效的数据搜索算法,适用于有序数组。这个文件可能包含对二分查找算法的详细解释和实现,有助于你理解递归和迭代两种方法,并学会如何在实际项目中应用。 6. **PROTOTYP...

    poj推荐50题

    快速查找技术如二分查找、哈希等,在数据结构和算法中占有重要地位,能够大大提高程序效率。 #### 题目示例及解析: - **2503** 和 **2513** 两题适合了解快速查找的基本原理。 - **1035** 和 **1200** 这两个题目...

    coba-coba.rar_matlab c++

    综合以上信息,这个压缩包的内容可能是一个结合MATLAB和C++的项目,探讨了如何在两个环境中实现不同的根查找算法,并通过C++编写了相关变换(包括反射和旋转)以及插值的程序。这样的组合可能用于教学目的,帮助学习...

Global site tag (gtag.js) - Google Analytics