zoukankan      html  css  js  c++  java
  • JaveScript用二分法与普通遍历(冒泡)

    二分法 查找

      概念:

        从有序的数列中,折半查找.

      思路:

        -->  找到数组中最中间的元素,将其作为基准

        -->  从0开始判断数组中的元素,与基准进行比较

        -->  比基准小的元素,存入左边,

            比基准打得元素,存入右边

            依次递归,得出结果

    二分法查找函数

     1  function getNum(target, Arr){    
     2         var middle = Math.floor(Arr.length / 2) ,res;
     3         var last = Arr.length;
     4         var temp;
     5         function getRes(target,Arr){
     6             count++;
     7             if (target>Arr[middle]){
     8                 temp=middle;
     9                 middle= Math.floor(middle+Math.abs(last-middle)/2);
    10                 last=temp;
    11             }else if(target < Arr[middle]){
    12                 temp=middle;
    13                 middle = Math.floor(middle-Math.abs(last - middle) / 2)  ;  
    14                 last=temp;            
    15             }else{
    16                 res = middle;
    17                 return;
    18             }
    19             if(last==middle){  
    20                 Arr[middle]!=target;          
    21                 res = "不存在";
    22                 return;
    23             }
    24             return getRes(target,Arr);
    25         };
    26         getRes(target, Arr);
    27         return res;
    28     }

    普通遍历查找函数

    1 function getNum2(target, arr) {
    2         for (var i = 0; i < arr.length; i++) {
    3             count2++;
    4             if (target == arr[i]) {
    5                 return i;
    6             }
    7         }
    8         return "不存在";
    9     }

    生成随机数组

     1  (function(){
     2         var arr = [];
     3         for (var i = 0; i < 50000; i++) {
     4             var flag = true;
     5             var ele = Math.floor(Math.random() * 100000);
     6             for (var j = 0; j < arr.length; j++) {
     7                 if (arr[j] == ele) {
     8                     flag = false;
     9                     break;
    10                 }
    11             }
    12             flag && arr.push(ele);
    13         }
    14         for (var i = 0; i < arr.length; i++) {
    15             for (var j = 0; j < arr.length - i; j++) {
    16                 var temp;
    17                 if (arr[j] > arr[j + 1]) {
    18                     temp = arr[j];
    19                     arr[j] = arr[j + 1];
    20                     arr[j + 1] = temp;
    21                 }
    22             }
    23         }
    24         window.arr=arr;
    25         console.log(arr);//数组生成完毕,打印结果;
    26     })()

    二分法查找

            var count=0;
            console.log("二分法查找------------------------");
            console.time("二分法耗时");            
            console.log("结果" +getNum(31322, arr));
            console.log("查找次数为:"+count);
            console.timeEnd("二分法耗时");
            console.log("普通查找------------------------");    

    普通遍历

            var count2=0;
            console.time("普通遍历耗时");
            console.log("结果" +getNum2(31322, arr));
            console.log("查找次数为:"+count2);
            console.timeEnd("普通遍历耗时");    

    将二分法与普通遍历封装为函数

     1  function run(x){
     2             count=count2=0;
     3             console.log("二分法查找------------------------");
     4             console.time("二分法耗时");
     5             console.log("结果" +getNum(x, arr));
     6             console.log("查找次数为:"+count);
     7             console.timeEnd("二分法耗时");
     8             console.log("普通查找------------------------");
     9             function getNum2(target, arr) {
    10                 for (var i = 0; i < arr.length; i++) {
    11                     count2++;
    12                     if (target == arr[i]) {
    13                         return i;
    14                     }
    15                 }
    16                 return "不存在";
    17             }
    18             var count2 = 0;
    19             console.time("普通遍历耗时");
    20             console.log("结果"+getNum2(x, arr));
    21             console.log("查找次数为:"+count2);
    22             console.timeEnd("普通遍历耗时");
    23         };

    直接输入即可验证结果

  • 相关阅读:
    Linux实战教学笔记16:磁盘原理
    Linux实战教学笔记15:用户管理初级(下)
    Linux实战教学笔记14:用户管理初级(上)
    Linux实战教学笔记13:定时任务补充
    Linux实战教学笔记12:linux三剑客之sed命令精讲
    Linux实战教学笔记11:linux定时任务
    Linux实战教学笔记10:正则表达式
    Linux实战教学笔记09:通配符
    Linux实战教学笔记08:Linux 文件的属性(下半部分)
    Linux实战教学笔记08:Linux 文件的属性(上半部分)
  • 原文地址:https://www.cnblogs.com/AmorR/p/8058473.html
Copyright © 2011-2022 走看看