【JS小白】查找与二分查找
1查找
查找可以分为:
-
有序查找(数组正序、倒序)
-
随机查找(索引不是有序递增或递减的,需要计算下一个索引,可能是跳来跳去的索引)。
1.1有序查找
有序查找时,简单的话只用一个for循环就能解决问题。
function sequenceSearch(arr, item){
for(let i = 0; i < arr.length; i++){
if(arr[i] === item){
return i;
}
}
return -1;
}
可以索引从0往后递增查找,也可以倒着来。
1.2随机查找
1.2.1二分查找
找到就返回基于0的索引,找不到就返回-1
function binarySearch(array, element){
var low = 0;
var hig = array.length - 1;
// console.log(mid);//变量提升了
while(low <= hig){
var mid = Math.floor((low + hig) / 2);//注意js需要显式转化为整数
if(element === array[mid]){
return mid;
}
else if(element > array[mid]){
low = mid + 1;//注意是mid,而不是low
}else{
hig = mid - 1;//注意是mid,而不是hig
}
}
// console.log(mid);
return -1;
}
注意点:
- 两个数相加除以2,得到的不一定是整数,需要显式向下取整。
//关于整数的问题
let a = 3 / 2
console.log(a);//得到1.5,而非1
console.log(Math.floor(a));//1
console.log(Math.ceil(a));//2
Math是内置函数,可以直接使用,不需要引入依赖。
-
while的条件是left小于等于right,不能只是小于。
-
left初始值为0,right初始值为最后一个元素的索引,记得arr.length-1。