常见查找算法(Java实现)
来源:互联网 发布:linux 文件夹大小排序 编辑:程序博客网 时间:2024/06/16 03:56
查找的性能分析:
对于查找算法而言,常用“其关键字和给定值进行过比较的记录个数的平均值”作为衡量查找算法的依据。
定义:为了确定记录在查找表中的位置,需要和给定的值进行比较的关键字个数的期望值称为查找算法在查找成功时的平均查找长度。
对于含有n个记录的表。查找成功时的平均查找长度为
静态表查找
顺序查找:
算法描述:从表中的第一个或者是最后一个记录开始,逐个的将表中记录的关键字和给定值进行比较。若某个记录的关键字和给定值相等,则查找成功;若表中所有记录的关键字和给定值都不相等,则查找失败。
算法实现:
public class OrderSearch { public static void main(String[] args) { int[] table = {1,23,4,5,6}; System.out.println(OrderSearch.orderSearch(table, 5)); } /** * 顺序查找 * @param table * @param keyWord * @return */ public static boolean orderSearch(int[] table,int keyWord){ for(int i = 0;i<table.length;i++){ if(table[i] == keyWord){ return true; } } return false; }}
折半查找(针对有序序列):
算法描述:折半查找的前提条件是在一个有序的序列中。首先确定待查记录所在的区间,然后逐步的缩小范围区间直到找到或者找不到该记录为止。与数学中的二分法一样。
算法实现:
public class BinarySearch { public static void main(String[] args) { int[] table = {2,4,5,6,7,8,9,10}; System.out.println(BinarySearch.binarySearch(table, 20)); } public static boolean binarySearch(int[] table ,int keyWord){ int low = 0; int height = table.length-1; int mid; while(low<=height){ mid = (low+height)/2; if(table[mid]> keyWord){ height = mid-1; }else if(table[mid]<keyWord){ low = mid+1; }else if(table[mid] == keyWord){ return true; } } return false; }}
斐波那契查找(针对有序序列):
算法描述:斐波那契查找是根据斐波那契序列的特点对表进行分割。假设表中记录的个数比某个斐波那契数小1,即
算法实现:
public class FibonacciSearch { public static void main(String[] args) { int[] table = {1,2,3,4,5,6,7,8,9,10,11,12,13,14}; for(int i = 0;i<table.length;i++){ System.out.println("表中记录为"+table[i]+"\t,查询结果为"+FibonacciSearch.fibonacciSearch(table, table[i])+"\n"); } for(int i = 0;i<5;i++){ int ran = new Random().nextInt(100)+14; System.out.println("关键字为:"+ran+"查询结果为"+FibonacciSearch.fibonacciSearch(table, ran)+"\n"); } } public static boolean fibonacciSearch(int[] table,int keyWord){ //确定需要的斐波那契数 int i = 0; while(getFibonacci(i)-1 == table.length){ i++; } //开始查找 int low = 0; int height = table.length-1; while(low<=height){ int mid = low + getFibonacci(i-1); if(table[mid] == keyWord){ return true; }else if(table[mid]>keyWord){ height = mid-1; i--; }else if(table[mid]<keyWord){ low = mid+1; i-=2; } } return false; } /** * 得到第n个斐波那契数 * @return */ public static int getFibonacci(int n){ int res = 0; if(n == 0){ res = 0; }else if(n == 1){ res = 1; }else{ int first = 0; int second = 1; for(int i = 2;i<=n;i++){ res = first+second; first = second; second = res; } } return res; }}
动态表查找
二叉排序树(二叉查找树):
定义:二叉排序树或者是空树,或者是具有下列性质的一颗树:
若他的左子树不为空,则左子树上所有结点的值均小于其根节点的值
若他的右子树不为空,则右子树上所有结点的值均大于其根节点的值
他的左右子树也均是二叉排序树
关于二叉排序树的Java实现,这篇博文有详细的介绍,可以参考一下
http://blog.csdn.net/evankaka/article/details/48088241
由于二叉排序树的特性,使得我们对其进行中序遍历时就很容易得到一个非递减的有序序列,因此二叉排序树也经常用于排序操作。
参考:《数据结构》(C语言版)严蔚敏 吴伟明
- 常见查找算法Java实现
- 常见查找算法(Java实现)
- java实现常见查找算法
- 查找算法Java实现
- 常见排序和查找算法的实现
- Java中常见的查找算法
- 算法:查找----二分查找(Java实现)
- [查找算法]--二分查找的Java实现
- Java实现二分查找算法
- java 二分查找算法实现
- 二分查找算法java实现
- 二分查找算法----java实现
- Java实现二分查找算法
- 常见排序算法--java实现
- java实现常见排序算法
- Java实现常见排序算法
- 常见排序算法java实现
- 常见排序算法java实现
- 网站设计之网站背景设计思路
- C#面向对象_构造方法_160928
- php实现微信公众号主动推送消息
- 工程质量的一些实践
- js操作excel方法
- 常见查找算法(Java实现)
- Oracle分页查询语句分析
- 常用JS代码段 (JS获取地址栏get参数 JS判断手机访问等)
- [LeetCode-Java]16. 3Sum Closest
- 使用CSDN-markdown编辑器
- Android_Note(一)——主题界面设计
- 常用排序算法之希尔排序
- 数据库三大范式
- Revit开发之获取房间边界