• 二分查找法查找数组元素下表


    二分查找法查找数组元素下表

     这方法是在学习C++的时候看到的 然后我把他改装成js的了,算法不分语言的,

    使用该方法前要对数组进行排序, 下面对数组排序

    /*
    * 对数组排序 冒气泡发
    * + 张建军 +
    *
    *    list 数组
    *    ntype 0为正序
    */
    function ArraySort(list, ntype) {
        var temp = "";
        var max = 0;
        while (max < list.length) {
            for (var j = max + 1; j < list.length; j++) {
                if (list[j] > list[max] && ntype == "1") {
                    temp = list[max];
                    list[max] = list[j];
                    list[j] = temp;
                }
                else if (list[j] < list[max] && ntype == "0") {
                    temp = list[max];
                    list[max] = list[j];
                    list[j] = temp;
                }
            }
            max = max + 1;
        }
        return list;
    }

    上面的排序是普通的冒气泡法,排序后然后就可以使用下面的方法了

    下面的当长度小于3的的是就不执行了,因为长度太小了是用普通的方法还快一些

    /*
    * 匹配数组元素位置,二分查找法,使用前需要对数组排序
    * + 张建军 +
    *
    *    list 数组
    *    val 查找元素
    *    找到即返回下标,没找到反回插入点
    */
    function SearchKey(list, val) {
        //判断正烦序
        var sort = 0; //0 默认正序
        if (list.length >= 3) {
            if (list[0] > list[list.length - 1]) {
                sort = 1;
            }
        }
    
        var intlow = 0;
        var intHigh = list.length - 1;
        var result = "";
        while (intHigh >= intlow) {
            var intMid = parseInt((intlow + intHigh) / 2);
            if (val > list[intMid]) {
                if (sort == 0) {
                    intlow = intMid + 1
                }
                else {
                    intHigh = intMid - 1;
                }
            }
            else if (val == list[intMid]) {
                return intMid;
            }
            else if (val < list[intMid]) {
                if (sort == 0) {
                    intHigh = intMid - 1;
                }
                else {
                    intlow = intMid + 1
                }
            }
        }
        return -intlow;
    }
  • 相关阅读:
    P1939 【模板】矩阵加速(数列)
    NUMBER BASE CONVERSION POJ
    Raid POJ
    Genius ACM HihoCoder
    BZOJ1500: [NOI2005]维修数列 Splay维护序列
    BZOJ3245: 最快路线 拆点dijkstra
    存个头
    895E
    894E
    tarjan缩点/求桥模板
  • 原文地址:https://www.cnblogs.com/sxmny/p/2489513.html
Copyright © 2020-2023  润新知