二分查找算法(JAVA)
Posted Java野生程序猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找算法(JAVA)相关的知识,希望对你有一定的参考价值。
1.二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
2.算法要求:
(1)必须采用顺序存储结构
(2)必须按关键字大小有序排列
3.查找过程
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
4.实现方式:二分查找的实现用递归和循环两种方式
5.代码如下
import java.util.Arrays;
/**
* 二分查找
*/
public class BinarySearchTree {
/**
* 非递归二分查找
*/
public static int binarySearch(int num[], int number) {
if (num == null || num.length == 0) {
return -1;
}
int start, end, mid;
start = 0;
end = num.length - 1;
while (start <= end) {
mid = (start + end) / 2;
if (num[mid] == number){
return mid;
}
else if (num[mid] > number) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return -1;
}
/**
* 递归查找
*/
public static int RecursivebinarySearch(int num[], int start, int end, int key) {
int mid = (start + end) / 2;
if (num == null || num.length == 0 || key < num[start] || key > num[end]) {
return -1;
} else if (num[mid] > key) {
return RecursivebinarySearch(num, start, mid - 1, key);
} else if (num[mid] < key) {
return RecursivebinarySearch(num, mid + 1, end, key);
} else {
return mid;
}
}
public static void main(String[] args) {
int num[] = { 1, 3, 5, 6, 7, 9, 10 };
Arrays.sort(num);
System.out.println(binarySearch(num, 7));
System.out.println(RecursivebinarySearch(num, 0, num.length - 1, 7));
}
}
如果您喜欢,分享一下让更多的人学习
请点击标题下方的“Java野生程序猿”添加关注
或者长按下方的二维码添加关注
以上是关于二分查找算法(JAVA)的主要内容,如果未能解决你的问题,请参考以下文章
[Algorithm]二分插值斐波那契查找算法 Java 代码实现