二分查找
前提:为有序数组
时间复杂度:log2n
空间复杂度:O(1)
思想:在有序数组中,采用分治策略,在最坏情况下在O(log2n)时间复杂度的情况下完成搜索。即:(默认升序)将n个元素分成两份,如果target=array[n/2]位置的元素,则完成搜索;如果target>array[n/2]则继续在右半部分查找,反之则在左侧部分查找,循环直至找到目标。找不到则退出。
import java.util.Scanner;
/**
* @author :Dennis
* @date :Created in 4/1/2020 16:03
* @description:Binary Search
* @modified By:
* @version: 1.0
*/
public class BinarySearch {
public static int Search(int[] array, int target) {
int low, high, mid;
low = 0;
high = array.length - 1;
while (low <= high) {
mid = low + (high - low) / 2;
if (array[mid] == target) {
return mid;
} else if (array[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
public static void main(String[] args) {
int[] array = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8};
int x = Search(array, 4);
System.out.println("index:" + x);
Scanner scanner = new Scanner(System.in);
scanner.nextLine();
scanner.close();
}
}
除非放弃技术相关工作,否则每天最少Coding 50行^_^