二分查找和线性查找可运用于数组
线性查找 时间复杂度 O(n)
1、遍历数组
2、拿目标和数组中的元素进行匹对
3、找到则返回数组中该元素的下标
4、未查询到则返回-1
//自定义数组
public class MyArray {
int[] elements;
// 线性查找 public int search(int target) { for (int i = 0; i < elements.length; i++) { if (target == elements[i]) { return i; } } // 如果没找到 return -1; }
}
二分查找 时间复杂度 O(log2n)
二分查找是有必要的前提,即数组中的元素一定要排好顺序
1、找到该数组的中点
2、目标元素与中点值进行比对
相等则返回该中点元素下标
如果目标元素大于中点
则把低位元素的下标设置成中点向右移动一位
如果目标元素小于中点
则把高位元素的下标设置成中点向左移动一位
根据低位元素下标和高位元素下标重新计算出中点
public class MyArray { int[] elements; // 二分查找 public int binarySearch(int target) { int low = 0; int high = elements.length - 1; int mid = (low + high) / 2; while (true) { if (low > high) { break; } if (target == elements[mid]) { // 相等 返回位置 return mid; } else { // 如果target > mid if (target > elements[mid]) { low = mid + 1; } else { // target <elements[mid] high = mid - 1; } } mid = (low + high) / 2; } return -1; } }