1 二分查找/折半查找
思想:在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。
时间复杂度:折半搜索每次把搜索区域减少一半,时间复杂度为或log2(n)。(注意log2(n)和log(n)其实是同样的复杂度,因为它们之间仅仅差了一个常量系数而已)。(n代表集合中元素的个数)
空间复杂度:。虽以递归形式定义,但是尾递归,可改写为循环。
适用范围:优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
最多最少:元素有序时折半查找:最多+1次,最少1次;元素无序只能顺序查找:最多n次,最少1次
public class BinarySearch { /** * 二分查找算法,非递归 * * @param srcArray 有序数组 * @param des 查找元素 * @return des的数组下标,没找到返回-1 */ public static int binarySearch(int[] srcArray, int des) { int low = 0; int high = srcArray.length-1; while(low <= high) { int middle = (low + high)/2; if(des == srcArray[middle]) { return middle; } else if(des <srcArray[middle]) { high = middle - 1; } else { low = middle + 1; } } return -1; } public static void main(String[] args) { int[] src = new int[] {1, 3, 5, 7, 8, 9}; System.out.println(binarySearch(src, 3)); } }
//折半查找递归算法 //查询成功返回该对象的下标序号,失败时返回-1。 int BiSearch2(int r[],int low,int high,int k) { if(low>high) return -1; else { int mid=(low+high)/2; if(r[mid]==k) return mid; else if(r[mid]<k) return BiSearch2(r,mid+1,high,k); else return BiSearch2(r,low,mid-1,k); } }
public static void main(String[] args) { int r[]={1,2,3,4,5}; System.out.println(BiSearch2(r,1,5,5)); }
参考:http://zh.wikipedia.org/wiki/%E6%8A%98%E5%8D%8A%E6%90%9C%E7%B4%A2%E7%AE%97%E6%B3%95
http://www.2cto.com/kf/201212/172713.html
2 二叉排序树
又称二叉查找(搜索)树(Binary Search Tree)。其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树:
①若它的左子树非空,则左子树上所有结点的值均小于根结点的值;②若它的右子树非空,则右子树上所有结点的值均大于根结点的值;
③左、右子树本身又各是一棵二叉排序树。
相关推荐
4. **根查找算法**:寻找函数的零点,如二分法、牛顿-拉弗森法等。这些方法在解决方程求解问题时非常有用,Java可以通过迭代实现。 5. **优化算法**:如梯度下降法、牛顿法、遗传算法等,用于找到函数的最小值或...
《Java常用算法手册》是一本面向Java初学者的算法指南,旨在通过深入浅出的方式,帮助读者理解并掌握各种常见的编程算法,从而提高他们的编程能力和解决问题的效率。这本书的覆盖范围广泛,涉及到算法基础、数据结构...
8. **根查找算法**:比如二分查找法、Secant方法和Brent方法,用于寻找函数的实根或复根。 9. **数值积分**:如辛普森法则、梯形法则和高斯积分,它们用于估计函数的积分值,特别适合处理不规则分布的数据。 10. *...
这个"Java常用数值算法集"可能包含了以上提到的一些算法的实现,通过学习和研究这些代码,开发者不仅可以加深对数值算法的理解,还能提高解决问题的能力。记得在实际使用时,根据具体需求选择合适的算法和库,并优化...
8. **根查找算法**:如二分查找法、牛顿-拉弗森法、Secant方法等,用于寻找方程的实根。这些在物理模型求解、控制理论等领域都有应用。 9. **傅立叶变换**:离散傅立叶变换(DFT)和快速傅立叶变换(FFT)是处理...
6. **排序与查找算法**:快速排序、归并排序、二分查找等,虽然不是专门的数值算法,但它们在处理数据时至关重要。 7. **数值稳定性和误差分析**:理解算法的误差来源和如何保持计算结果的精度,是数值计算中的核心...
《Java常用算法手册》是一本深入探讨Java编程中常见算法的实用指南,旨在帮助开发者提升在实际工作中解决复杂问题的能力。这本书涵盖了从基础到高级的各种算法,为Java程序员提供了丰富的学习资源。 首先,本书会...
《Java常用算法手册》分三篇,共13章,分别介绍了算法基础、算法应用和算法面试题。首先介绍了算法概述,然后重点分析了数据结构和基本算法思想;接着,详细讲解了算法在排序、查找、数学计算、数论、历史趣题、游戏...
本资源“Java常用数值算法集”提供了丰富的算法实现,帮助开发者提高程序的计算效率和精度。以下是根据标题、描述和标签提炼出的一些重要Java数值算法知识点: 1. **基础算法**:Java中的基本算术运算包括加减乘除...
《Java常用算法手册》源代码是一份非常宝贵的资源,它为Java开发者提供了丰富的算法实现,是学习和实践算法的理想材料。这份源代码集合涵盖了多种经典和实用的算法,旨在帮助开发者提升编程技能,理解算法原理,并能...
2. **查找算法**:如二分查找、哈希查找、线性查找等。二分查找在有序数组中具有优秀的查找效率,哈希查找则利用哈希表实现近乎即时的查找。 3. **图论算法**:如深度优先搜索(DFS)和广度优先搜索(BFS),以及...
根据提供的文件信息,“Java常用算法手册.pdf”似乎是一份针对Java程序员的学习资源,旨在帮助他们掌握和提升在算法方面的知识与技能。然而,基于提供的简短描述和部分内容来看,并没有直接涉及具体的算法知识点,...
2. 查找算法: - 线性查找:遍历整个数组,直到找到目标元素或遍历结束。 - 二分查找:适用于有序数组,每次将查找范围减半,提高效率。 - 哈希查找:通过哈希函数快速定位元素,但可能有哈希冲突问题。 3. 数据...
《Java常用算法手册》是一本深入浅出的编程资源,主要涵盖了Java编程语言中的各种常见算法,对于学习和提升Java编程技巧以及理解算法思想具有重要价值。这份手册以实际可运行的代码为载体,使读者能够直观地看到算法...