折半查找
也叫二分查找。是在特定的有序列表中查找指定的值。返回改值在数组中的索引。方法:
- 从数组的中间元素查找该值,如果该值大于或小于中间元素,则在数组大于或小于的那块区域查找;
- 如果该元素恰好等于该值,则返回;
- 重复以上过程,直到找到目标元素的索引,查找成功;或者直到子数组为空,查找失败。 特点:必须为有序列表。 优点是比较次数少,查找速度快,平均性能好。
递归查找
let arr = [2, 5, 6, 7, 8, 9, 10, 15];
function mySearch(arr, low, high, key) {
let mid = parseInt((high + low) / 2);
console.log('arrSort', mid)
if (key < arr[mid]) {
high = mid - 1;
return mySearch(arr, low, high, key)
} else if (key > arr[mid]) {
low = mid + 1
return mySearch(arr, low, high, key)
} else {
return mid;
}
}
console.log('mySearch', mySearch(arr, 0, 8, 10))
while查找
let arr = [2, 5, 6, 7, 8, 9, 10, 15];
let key = 5;
function mySearch(arrSort) {
var low = 0;
let high = arrSort.length - 1;
while (low <= high) {
let mid = parseInt((high + low) / 2);
if (key > arrSort[mid]) {
low = mid + 1
} else if (key < arrSort[mid]) {
high = mid - 1
}
else if (key == arrSort[mid]) {
return mid;
}
}
}
console.log('mySearch', mySearch(arrSort))