一、二分查找
1、变体一:查找第一个值等于给定值的元素
var array=[1,3,4,5,6,8,8,8,11,18]
var search=function(array,value){
var low=0
var hight=array.length
while(low<=hight){
var middle=low+((hight-low)>>1)
if(array[middle]>value){
hight=middle-1
}else if(array[middle]<value){
low=middle+1
}else{
if(middle==0||array[middle-1]!==value){
return middle
} else{
hight=middle-1
}
}
}
return -1
}
console.log(search(array,8))
2、变体三:查找第一个大于等于给定值的元素
var array=[1,3,4,5,6,8,8,8,11,18]
var search=function(array,value){
var low=0
var hight=array.length
while(low<=hight){
var middle=low+((hight-low)>>1)
if(array[middle]>=value){
if(middle==0||array[middle-1]<value){
return middle
}else{
hight=middle-1
}
}else{
low=middle+1
}
}
return -1
}
console.log(search(array,9))
3、变体四:查找最后一个小于等于给定值的元素
var array=[1,3,4,5,6,8,8,8,11,18]
var search=function(array,value){
var low=0
var hight=array.length
while(low<=hight){
var middle=low+((hight-low)>>1)
if(array[middle]<=value){
if(middle==array.length-1||array[middle+1]>value){
return middle
}else{
low=middle+1
}
}else{
hight=middle-1
}
}
return -1
}
console.log(search(array,9))