goldEli / Front-End-Training

Front End Training
2 stars 5 forks source link

JS实现二分查找算法 #41

Open FireDragonZL opened 4 years ago

FireDragonZL commented 4 years ago
FireDragonZL commented 4 years ago
lurasso commented 4 years ago
function binarySerch(data,dset,start,end){
            var end = end || data.length - 1,
                start = start || 0,
                m = Math.floor((start+end)/2);
            if(data[m]==dset){
                return m;
            }
            if(dset<data[m]){
                return binarySerch(data,dset,0,m-1);
            }else{
                return binarySerch(data,dset,m+1,end);
            }
            return false;
        }
        var arr = [-10 , -4 , 0 , 1 , 5 , 7 , 16 , 18 ,30]
        console.log(binarySerch(arr,7));  //5
748580573 commented 4 years ago
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>冒泡</title>
</head>

<body>
    <div class="circle1"></div>
    <div class="circle2"></div>
    <div class="circle3"></div>
</body>

<script>
    var data = [2, 5, 6, 9, 11, 13, 16, 18, 21, 26, 58, 100];
    const target = 10;
    binarySelect(data, 100);
    function binarySelect(array,target){
        var left = 0;
        var right = data.length - 1;
        var middle = 0;
        for(;right >= 0 && left <= data.length - 1;){
            middle = Math.floor((left + right) / 2);
            if(target > array[middle]){
                left = middle + 1;
            }else if(target < array[middle]){
                right = middle - 1;
            }else{
                console.log(middle);
                break;
            }
        }
    }
</script>

</html>
FireDragonZL commented 4 years ago

for (; right >= 0 && left <= data.length - 1;) 这种可以改成while循环