zoukankan      html  css  js  c++  java
  • 二分查找法查找数组元素下表

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

     这方法是在学习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;
    }
  • 相关阅读:
    windows&nbsp;下搭建apache&nbsp;php&nbsp;mysql&nbsp;p…
    PHP&nbsp;VC9和VC6以及Thread&nbsp;Safe和Non…
    mysql数据库插入中文时出现ERROR&nbsp;1…
    phpmyadmin&nbsp;配置
    Linux系统安装时分区的选择【转】
    汉字 Unicode 编码范围
    Linux 程序后台运行
    添加用户username到sudo组
    nautilus
    记录一下自己的.tmux.conf,.vimrc
  • 原文地址:https://www.cnblogs.com/sxmny/p/2489513.html
Copyright © 2011-2022 走看看