查找算法
顺序搜索
// 顺序搜索
let arr = [5, 4, 3, 2, 1]
let target = 3
function sequentialSearch(arr, target) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === target) {
return i
}
}
return -1
}
console.log(sequentialSearch(arr, target)) //2,成功找到数组下标
思路:数组遍历,将每一个元素和我们的目标值进行比较找出结果.这种算法是效率最低的一种算法.
二分搜索
前提:一定要排好序再使用
function binarySearch(arr, target) {
let low = 0;
let high = arr.length - 1
while (low <= high) {
let mid = Math.floor((low + high) / 2)
if (target > arr[mid]) {
low = mid + 1
} else if (target < arr[mid]) {
high = mid - 1
} else {
return mid
}
}
return -1
}
//演示
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 23, 44, 86];
let target = 10
console.log(binarySearch(arr, target));//打印下标9
方法2:递归写法
function binarySearch(arr, low, high, target) {
if (low > high) {
return -1
}
let mid = Math.floor((low + high) / 2)
if (target > arr[mid]) {
low = mid + 1
return binarySearch(arr, low, high, target)
} else if (target < arr[mid]) {
high = mid - 1
return binarySearch(arr, low, high, target)
} else {
return mid
}
}
console.log(binarySearch(arr, 0, arr.length - 1, target), "递归二分算法"); //打印9
思路:
二分法查找是一种在有序数组中查找特定元素的搜索算法。
查找过程可以分为以下步骤:
(1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进行下一步。
(2)如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半区域查找,然后重复第一步的操作。
(3)如果某一步数组为空,则表示找不到目标元素。