varmySqrt=function(x){// 直接调用Math.sqrt()函数return Math.floor(Math.sqrt(x))};const x =8;// 2
console.log(mySqrt(x));
二分法
基本查找步骤:
例如: x =8[0,1,2,3,4,5,6,7,8......x]- left =0 right = x =8- mid = Math.floor((left + right)/2)=4-4*4=16>8 表示开方值在 [0123] 区域内
- 继续二分
- right = mid -1=3 left =0- mid =1-1*1=1<8 表示开方值在 [23] 区域内
- 继续二分
- left = mid +1=1+1=2 right =3- mid =5/2=2-2*2=4<8- left = mid +1=2+1=3= right
- mid =6/2=3-3*3=9>8- right = mid -1=3-1=2- 此时 right =2< left =3 跳出whie
-return right =2
varmySqrt=function(x){var left =0;var mid;var right = x;while(left <= right){// 取中间值
mid = Math.floor((left + right)/2);// 根据中间值的平方与所求x的大小进行对比 确定开方之后的元素位于中间值的左/右侧// mid取小了 开方值在mid 右侧if(mid * mid < x){
left = mid +1;}// mid 取大了 开方值在mid左侧elseif(mid * mid > x){
right = mid -1;}// mid 就是所求的开方值else{return mid
}}return right
};const x =8;// 2
console.log(mySqrt(x));