题目:
已知一个有序数组arr 给定需要搜索的元素,返回索引,若无则返回-1
思路:
递归和非递归
1.代码如下 BinSearch .java:
package com.yuhl.right;
public class BinSearch {
public static void main(String[] args) {
int[] arr = {2, 4, 6, 8};
int index = binSearch(arr, 8);
System.out.println(index);
System.out.println("======================================");
int reIndex = reBinSearch(arr, 8,1,arr.length-1);
System.out.println(reIndex);
}
public static int binSearch(int[] arr, int key) {
int low = 0;
int high = arr.length - 1;
int middle = 0;
if (key < arr[low] || key > arr[high] || low > high) {
return -1;
}
while (low <= high) {
middle = (low + high) / 2;
if (arr[middle] > key) {
high = middle - 1;
} else if (arr[middle] < key) {
low = middle + 1;
} else {
return middle;
}
}
return -1;
}
public static int reBinSearch(int[] arr, int key, int low, int high) {
if (key < arr[low] || key > arr[high] || low > high) {
return -1;
}
int middle = (low + high) / 2;
if (arr[middle] > key) {
return reBinSearch(arr, key, low, middle - 1);
} else if (arr[middle] < key) {
return reBinSearch(arr, key, middle + 1, high);
} else {
return middle;
}
}
}
2.执行结果:
"C:\Program Files\Java\jdk1.8.0_201\bin\java.exe"
3
======================================
3