本文详细介绍JavaScript中二分查找(折半查找)算法的原理与实现。该算法适用于有序数组,通过不断缩小搜索范围来定位目标元素。文中提供了非递归与递归两种JS实现方式,并解析了核心逻辑与边界处理,帮助开发者高效掌握这一基础搜索技术。
二分查找算法原理
二分查找,亦称折半查找,是一种专门针对有序数组设计的元素搜索算法。其核心查找流程包含以下几个关键步骤:
第一步,从有序数组的中间元素开始比对。若中间元素恰好等于目标值,则搜索成功并结束;否则进入下一步。第二步,根据目标值与中间元素的大小关系,确定搜索区间:若目标值大于中间元素,则在数组右半部分继续查找;若目标值小于中间元素,则在左半部分查找,并重复上述中间点比对操作。第三步,若搜索区间缩小至为空,则判定目标元素不存在于该数组中。
参考代码实现如下:
JavaScript代码实现
// 非递归算法
function binary_search(arr, key) {
var low = 0,
high = arr.length - 1;
while(low <= high){
var mid = parseInt((high + low) / 2);
if(key == arr[mid]){
return mid;
}else if(key > arr[mid]){
low = mid + 1;
}else if(key < arr[mid]){
high = mid -1;
}else{
return -1;
}
}
};
var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
var result = binary_search(arr,10);
alert(result); // 9 返回目标元素的索引值
// 递归算法
function binary_search(arr,low, high, key) {
if (low > high){
return -1;
}
var mid = parseInt((high + low) / 2);
if(arr[mid] == key){
return mid;
}else if (arr[mid] > key){
high = mid - 1;
return binary_search(arr, low, high, key);
}else if (arr[mid] < key){
low = mid + 1;
return binary_search(arr, low, high, key);
}
};
var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
var result = binary_search(arr, 0, 13, 10);
alert(result); // 9 返回目标元素的索引值
以上即为二分查找算法的主要内容,希望能为读者的学习提供有益参考,欢迎持续关注本站获取更多技术分享。