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

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

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

 

posted @ 2012-05-08 08:47  伤心木乃伊  阅读(598)  评论(0编辑  收藏  举报