• js二分查找算法


    二分查找高效的前提是数据结构是有序的。就好比猜1~100之间的数,先猜50,如果太大了就猜25,如果太小了就猜75.每一次都猜最大值和最小值的中间点.

    1.随机生成100个0~100之间的随机数.

        var arr = [];
        for(var i = 0;i<100;i++){
            arr[i] = Math.floor(Math.random()*101);
        }

    2.排序(冒泡排序)

        var sorted=true;   //假设已经排好了
        for(var i=0;i<arr.length-1;i++){   //比较乱arr.length-1 次
            for(var j=0;j<arr.length-1-i;j++){   //每次中两两比较的次数  排好的就不需要比较了
                if(arr[j]>arr[j+1]){
                    arr[j] = [arr[j+1],arr[j+1] = arr[j]][0];
                    sorted=false;
                }
            }
            if(sorted==true){
                break;
            }        
        }

    3.查找

        function search(arr,data){
            var max = arr.length-1,  //最大值
                min = 0;  //最小值
            while(min<=max){
                var mid = Math.floor((max+min)/2); //中间值
                if(arr[mid]<data){
                    min = mid+1;
                }else if(arr[mid]>data){
                    max = mid-1;
                }else{
                    return mid; 
                }
            }
            return -1;   //没找到返回-1
        }
        console.log(arr);//[0, 1, 2, 2, 3, 4, 4, 4, 5, 6, 7, 10, 11, 12, 14, 15, 16, 17, 18, 18, 20, 21, 23, 24, 24, 24, 25, 25, 25, 26, 28, 28, 34, 35, 35, 38, 39, 39, 40, 40, 42, 44, 48, 48, 49, 51, 51, 51, 53, 54, 54, 54, 55, 56, 58, 59, 59, 59, 60, 61, 62, 62, 63, 63, 65, 66, 67, 68, 68, 69, 69, 71, 71, 72, 73, 74, 76, 76, 77, 82, 83, 84, 85, 86, 86, 86, 86, 87, 90, 91, 91, 94, 94, 94, 94, 95, 95, 97, 98, 100]
      console.log(search(arr,25)); //27
        console.log(search(arr,104)); //-1

     4.查找重复次数

    通过向左向右遍历查找重复出现的次数。

        function count(arr,data){
            var count = 0;
            var position = search(arr,data);
            if(position>-1){
                count++;
                for(var i=position-1;i>0;i--){
                    if(arr[i]==data){
                        count++;
                    }else{
                        break;
                    }
                }
                for(var i=position+1;i<arr.length;i++){
                    if(arr[i]==data){
                        count++;
                    }else{
                        break;
                    }
                }
            }
            return count;
        }
  • 相关阅读:
    Roce ofed 环境搭建与测试
    Ubuntu 1804 搭建NFS服务器
    Redhat 8.0.0 安装与网络配置
    Centos 8.1 安装与网络配置
    SUSE 15.1 系统安装
    VSpare ESXi 7.0 基本使用(模板、iso、SRIOV)
    VSpare ESXi 7.0 服务器安装
    open SUSE leap 15.1 安装图解
    KVM虚拟机网卡连接网桥
    GitHub Action一键部署配置,值得拥有
  • 原文地址:https://www.cnblogs.com/zhang-wang/p/7530126.html
Copyright © 2020-2023  润新知