二分查找算法的JAVA实现
来源:互联网 发布:淘宝伴侣怎么用 编辑:程序博客网 时间:2024/05/16 11:36
二分查找算法:
是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(logn) 。
【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
实现代码
package com.teradata.lsw.sort;
public class BinarySearch {
/**
* @param args
*
* @author TD_LSW
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = new int[] { 3, 5, 11, 17, 21, 23, 28, 30, 32, 50, 64, 78, 81,
95, 101 };
System.out.println(binarySearch(a, 11));
System.out.println(binarySearch(a, 21, 0, a.length - 1));
}
/**
* 二分查找的递归实现
*
* @param a
* @param e
* @param low
* @param high
* @return
*/
private static int binarySearch(int[] a, int e, int low, int high) {
// TODO Auto-generated method stub
int middle = (low + high) / 2;
while (low <= high) {
if (a[middle] == e) {
return middle;
} else if (a[middle] > e) {
return binarySearch(a, e, low, middle - 1);
} else {
return binarySearch(a, e, middle + 1, high);
}
}
return -1;
}
/**
* 二分查找的非递归实现
*
* @param a
* @param e
* @return
*/
private static int binarySearch(int[] a, int e) {
// TODO Auto-generated method stub
int low = 0;
int high = a.length - 1;
while (low <= high) {
int middle = (low + high) / 2;
if (a[middle] == e) {
return middle;
} else if (a[middle] > e) {
high = middle - 1;
} else {
low = middle + 1;
}
}
return -1;
}
}
折半查找的算法讨论:
优点:ASL≤log2n,即每经过一次比较,查找范围就缩小一半。经log2n 次计较就可以完成查找过程。
缺点:因要求有序,所以要求查找数列必须有序,而对所有数据元素按大小排序是非常费时的操作。另外,顺序存储结构的插入、删除操作不便利。
- [查找算法]--二分查找的Java实现
- java实现的二分查找算法
- 二分查找算法的JAVA实现
- Java实现的二分查找算法
- Java实现的二分查找算法
- Java实现的二分查找算法
- Java实现二分查找的递归算法
- 基于Java实现的二分查找算法
- Java实现二分查找算法
- java 二分查找算法实现
- 二分查找算法java实现
- 二分查找算法----java实现
- Java实现二分查找算法
- Java对查找算法的实现—二分查找(二)
- 算法:查找----二分查找(Java实现)
- 二分查找算法的实现
- 实现二分查找的算法
- 二分查找算法的实现
- JS中showModalDialog 详细使用
- asp.net MVC3 中Conroller中对于CRUD的基本操作
- python expect模块pexpect简单应用
- IOS开发工具大汇总(二)
- VC中生成文字图片并保存到文件目录
- 二分查找算法的JAVA实现
- Struts2中<s:action/>标签的动态调用
- StringGrid 删除行,行ID将不正确的解决方法
- php——学习笔记,检验字符类型
- Android view note
- [ACM] POJ 3687 Labeling Balls (拓扑排序,逆向建边)
- 输入一行字符,分别统计出其中英文,空格,数字和其他字符的个数
- Flex的读取本地XML文件方式
- Android 文件管理器