zoukankan      html  css  js  c++  java
  • 二分查找法优缺点:

    数组有序的情况下:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <script type="text/javascript">
                //顺序必须有序
                 var num = 100000;
                 var randomNum = Math.ceil(Math.random()*num);
                 document.title = randomNum;
                 var arr = [];
                 for(var i = 0 ;i<num;i++)
                 {
                     arr.push(i)
                 }
                 console.log(randomNum);
                  //======第一种方式=========
                 function show1(arr,randomNum)
                 {
                     console.time(2)
                       for (var i = 0; i <arr.length; i++) {
                           if(arr[i] === randomNum)
                           {
                               console.timeEnd(2);
                               return arr[i];
                           }
                       }
                 }
                 show1(arr,randomNum);
                 //======第二种方式=========
                 function show(arr,randomNum)
                 {
                     console.time(1)
                     var first = 0;
                     var last = arr.length -1;
                     
                     while(first <= last)
                     {
                         var mindex = Math.floor((first + last)/2);
                         if(randomNum < arr[mindex]) //大于中间值
                         {
                             last = mindex -1;
                         }else if(randomNum > arr[mindex]){
                             first = mindex +1;
                         }else{
                             console.timeEnd(1)
                              return arr[mindex];
                         }
                     }
                 }
                 console.log(show(arr,randomNum));
            </script>
        </body>
    </html>

    数组无序的情况下:

    使用二分 先把数组排列成有序------然后二分  所花的时间比  普通for循环的时间要长

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <script type="text/javascript">
                //顺序必须有序
                 var num = 100000;
                 var randomNum = Math.ceil(Math.random()*num);
                 document.title = randomNum;
                 var arr = [];
                 for(var i = 0 ;i<num;i++)
                 {
                     arr.push(i)
                 }
                 //无序的排序
                 arr.sort(function(){
                     return Math.random() -0.5;
                 })
                 console.log(randomNum);
                  //======第一种方式=========
                 function show1(arr,randomNum)
                 {
                     console.time(2)
                       for (var i = 0; i <arr.length; i++) {
                           if(arr[i] === randomNum)
                           {
                               console.timeEnd(2);
                               return arr[i];
                           }
                       }
                 }
                 show1(arr,randomNum);
                 //======第二种方式=========
                 function show(arr,randomNum)
                 {
                     console.time(1)
                     arr.sort(function(n1,n2){
                         return n1 -n2;
                     })
                     var first = 0;
                     var last = arr.length -1;
                     
                     while(first <= last)
                     {
                         var mindex = Math.floor((first + last)/2);
                         if(randomNum < arr[mindex]) //大于中间值
                         {
                             last = mindex -1;
                         }else if(randomNum > arr[mindex]){
                             first = mindex +1;
                         }else{
                             console.timeEnd(1)
                              return arr[mindex];
                         }
                     }
                 }
                 console.log(show(arr,randomNum));
            </script>
        </body>
    </html>
  • 相关阅读:
    携程开源框架Apollo基础学习(一)
    nslookup,dig,host的用法详解
    curl命令学习
    Saltstack本地管理无master模式
    Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?
    JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
    #{}和${}的区别是什么?
    为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
    MyBatis 与 Hibernate 有哪些不同?
    MyBatis 的好处是什么?
  • 原文地址:https://www.cnblogs.com/h5monkey/p/6639994.html
Copyright © 2011-2022 走看看