直接上代码:
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; } } 查找结果:总结:总结过我们可以看出,二分法查找几乎是不耗时,所以方法是很重要的