1.递归
主要是控制三个变量 start end mid ,开始 结束 中间,反复就ok了。
const data = [18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
function Recursive(s,data){
let len = data.length
let start = 0
let end = len-1
let mid
return find(start,end,s)
}
function find(start,end,s){
mid =Math.ceil((end+start)/2)
if (s==data[mid]) {
return s
}
else if(s>data[mid] && start <= end) {
end = mid-1
return find(start,end,s)
}
else if(s<data[mid] && start <= end){
start = mid+1
return find(start,end,s)
}
else{
return null
}
}
let v = find(0,15,data)
console.log("vvvv",v)
- while循环
const data = [18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
function while_find(s){
let len = data.length
let start = 0
let end = len-1
let mid
while(start <= end){
mid =Math.ceil((end+start)/2)
if (s<data[mid]) {
start = mid+1
}
else if(s>data[mid]){
end = mid-1
}
else{
return s
}
}
return null
}
let v= while_find(8)
console.log("vvvv",v)
主要借鉴了这篇文章 点击打开 里面还有一些二分算法的变形, 感兴趣的同学可以去看看 写的很棒。