顺序查找
- 如果线性表为无序表,即表中元素的排列是无序的,则不管线性表采用顺序存储还是链式存储,都必须使用顺序查找。
- 如果线性表有序,但采用链式存储结构,则也必须使用顺序查找。
二分查找
必须遵循两个条件:数组有序、符合左闭右开原则(是一种区间无重复的思想)
二分查找思想图:
/***
* 二分查找
* binary search ,this is must be order array
* @param array 源数组
* @param fromIndex 开始索引
* @param toIndex 结束索引
* @param key 值
* @return
*/
public static int binarySearch(int[] array, int fromIndex, int toIndex, int key) {
int low = fromIndex;
/**左开右闭原则,保持连续空间**/
int high = toIndex - 1;
while (low <= high) {
/**查找中间的数**/
int midIndex = (low + high) >> 1;
int midValue = array[midIndex];
/**如果大于中间数,左边查找**/
if (key > midValue) {
low = midIndex + 1;
/**如果小于中间数,右边查找**/
} else if (key < midValue) {
high = midIndex - 1;
} else {
return midIndex;
}