js 二分查找
二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法
正常拿到的数组可能是没有经过排序的
示例:
let arr = [2, 3, 44, 5, 88, 12, 5, 6]; //没有排序过得数组
function sortFun(a,b){ //先写个sort从小到大排序函数
return a - b
}
//arr.sort 排序完成 然后过滤
let arrfilter = [new Set(arr.sort(sortFun));
let sortArray = [...arrfilter]; // 排序数组
接下来进入正题
/**
* @param arr 排序好了的数组
* @param val 查询索引的值
**/
function findArrIndex(arr, val) {
let left = 0;
let right = arr.length - 1; // 因为索引 数组长度-1
while (left <= right) { // while循环
//整个数组长度 除以2 就是数组的一半 因为已经被排序好了 如果比中间的数字大 直接index+1 去往查找更大的 否则index-1 往左查
let index = parseInt((right + left)) / 2;
// console.log(left);
if (arr[index] === val) {
return index;
} else if (arr[index] < val) {
left = index + 1;
} else {
right = index - 1;
}
}
}