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

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

 这方法是在学习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;

}

 

你可能感兴趣的:(二分查找)