关于二分查找的一些想法
程序员文章站
2022-03-12 22:32:46
...
二分查找总结笔记。
1. 思想
:将一个有序的序列,不断的将中间的值和关键值做对比,如果相等就返回中间值;如果中间值大,那么就将中间值之前的序列 * 重新作为有序序列和关键字做对比,中间值小的情况也是一样。 * 最终找出关键值所在的位置。
**
2. 代码实现
1.使用非递归实现二分查找
public int binarySearch(int keyValue, int[] arr) {
//分别给出首尾索引,和中间值索引
int lowIndex=0;
int higIndex = arr.length-1;
while (lowIndex <= higIndex) {
//由于可能涉及到多次对半的划分,所以动态的获取midIndex
int midIndex = lowIndex + (higIndex - lowIndex) / 2;
if (arr[midIndex] < keyValue) {
lowIndex=midIndex+1;
} else if (arr[midIndex] > keyValue) {
higIndex = midIndex - 1;
} else {
return midIndex;
}
}
return -1;
}
2.使用递归方式实现二分查找
public int RoundBinarySearch(int lowIndex, int higIndex, int[] arr,int value) {
int midIndex = lowIndex + (higIndex - lowIndex) / 2;
if (lowIndex <= higIndex) {
if (arr[midIndex] == value) {
return midIndex;
} else if (arr[midIndex] < value) {
lowIndex = midIndex + 1;
return RoundBinarySearch(lowIndex, higIndex, arr, value);
} else {
higIndex = midIndex - 1;
return RoundBinarySearch(lowIndex, higIndex, arr, value);
}
}
return -1;
}```