直接上代码:
import java.text.MessageFormat;
public class AppTest {
static int length = 70000000;
static int[] array = new int[length];
static {
for (int i = 0; i < length; i++) {
array[i] = i;
}
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
int target = (int) (Math.random() * length * 2);
long start_f1 = System.currentTimeMillis();
int index_f1 = findIndex(array, target);
long end_f1 = System.currentTimeMillis();
long time_f1 = end_f1 - start_f1;
long start_f2 = System.currentTimeMillis();
int index_f2 = findIndexByFor(array, target);
long end_f2 = System.currentTimeMillis();
long time_f2 = end_f2 - start_f2;
System.out.println(MessageFormat.format("目标数据:{0}\t二分法耗时:{1}\t普通方法耗时:{2}\t二分法结果:{3}\t普通方法结果:{4}",
target, time_f1, time_f2, index_f1, index_f2));
}
}
public static int findIndex(int[] arr, int target) {
return findIndex(arr, 0, arr.length, target);
}
public static int findIndex(int[] arr, int start, int end, int target) {
int middle = (start + end) / 2;
if (target == arr[middle]) {
return middle;
} else if (start > end ||
target < arr[0] ||
target > arr[arr.length - 1]) {
return -1;
} else if (target < arr[middle]) {
return findIndex(arr, start, middle - 1, target);
} else if (target > arr[middle]) {
return findIndex(arr, middle + 1, end, target);
}
return -1;
}
public static int findIndexByFor(int[] arr, int target) {
int index = 0;
for (int i : arr) {
if (i == target) {
return index;
}
index++;
}
return -1;
}
}
查找结果:
总结:总结过我们可以看出,二分法查找几乎是不耗时,所以方法是很重要的