题目:
在一个排序数组中寻找一个目标数字,返回目标数字在数组中的索引
思路:
1、递归
2、非递归
代码:
package com.datastructure.other;
/**
* 二分/折半查找
*/
public class HalfSearch {
/**
* 给定一个有序(递增)数组和目标值,返回目标值在数组中的索引
*
* 思路:
* 采用二分法查找-递归实现
*/
public static int getIndexInArray(int[] arr, int value) {
if (arr == null || arr.length <= 0) {
return -1;
}
return getIndexInArray(arr, 0, arr.length - 1, value);
}
public static int getIndexInArray(int[] arr, int start, int end, int value) {
int mid = (start + end) >> 1;
if (start <= end && arr[mid] == value) {
return mid;
}
if (arr[mid] < value) {
return getIndexInArray(arr, mid + 1, end, value);
}
return getIndexInArray(arr, start, mid - 1, value);
}
/**
* 思路:
* while循环实现
*/
public static int getIndexInArrayByLoop(int[] arr, int value) {
if (arr == null || arr.length <= 0) {
return -1;
}
int start = 0;
int end = arr.length - 1;
int mid = -1;
int curVal = -1;
while (start <= end) {
mid = (start + end) >> 1;
curVal = arr[mid];
if (curVal == value) {
return mid;
} else if (curVal > value) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return -1;
}
public static void main(String[] args) {
int[] arr = {1,2,3,4,6,8,9,10,26,56,78};
System.out.println(getIndexInArrayByLoop(arr, 78));
}
}