二分查找
2014-05-27 16:45
183 查看
二分查找又称折半查找,它是一种效率较高的查找方法。 时间复杂度:O(log2N)
【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
<pre name="code" class="java">public class BinarySearch {
public static void main(String[] args) {
int[] src = new int[] {1, 3, 5, 7, 8, 9,10};
System.out.println(binarySearch(src, 3));
System.out.println(binarySearch(src, 4));
System.out.println(binarySearch(src,3,0,src.length-1));
}
/**
* * 二分查找算法 * *
*
* @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;
}
/**
*二分查找特定整数在整型数组中的位置(递归)
*@paramdataset
*@paramdata
*@parambeginIndex
*@paramendIndex
*@returnindex
*/
public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){
int midIndex = (beginIndex+endIndex)/2;
if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){
return -1;
}
if(data <dataset[midIndex]){
return binarySearch(dataset,data,beginIndex,midIndex-1);
}else if(data>dataset[midIndex]){
return binarySearch(dataset,data,midIndex+1,endIndex);
}else {
return midIndex;
}
}
}
【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
<pre name="code" class="java">public class BinarySearch {
public static void main(String[] args) {
int[] src = new int[] {1, 3, 5, 7, 8, 9,10};
System.out.println(binarySearch(src, 3));
System.out.println(binarySearch(src, 4));
System.out.println(binarySearch(src,3,0,src.length-1));
}
/**
* * 二分查找算法 * *
*
* @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;
}
/**
*二分查找特定整数在整型数组中的位置(递归)
*@paramdataset
*@paramdata
*@parambeginIndex
*@paramendIndex
*@returnindex
*/
public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){
int midIndex = (beginIndex+endIndex)/2;
if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){
return -1;
}
if(data <dataset[midIndex]){
return binarySearch(dataset,data,beginIndex,midIndex-1);
}else if(data>dataset[midIndex]){
return binarySearch(dataset,data,midIndex+1,endIndex);
}else {
return midIndex;
}
}
}
相关文章推荐
- 二维数组的二分查找 解题报告
- 二分查找的递归和非递归实现
- 圆周舞蹈_纪中1745_二分查找
- 折半查找(二分查找)
- 数据结构实验之查找四:二分查找
- 分治法--二分查找、乘方、斐波那契数
- 你真的会写二分查找吗?
- 大开销递归版二分查找
- 二分查找——Search a 2D Matrix
- 数据结构图文解析之:二分查找及与其相关的几个问题解析
- 几种不同的二分查找
- 二分查找 找到了返回位置 没找到返回应该插入的位置
- 《算法导论》第二章----插入排序(伪代码实现、课后习题(递归版本、二分查找策略版本))
- java实现顺序,二分,分块查找
- (模板题)poj 2190 Power of Cryptography(二分查找)
- 二分查找key值是否在排序数组中
- poj 2318 TOYS 叉乘 二分查找
- hdoj 4715 Difference Between Primes 素数筛选+二分查找
- 二分查找
- 【POJ】3685 - Matrix 二分->查找第K大的值