二分ルックアップ配列要素の下の表

4819 ワード

二分ルックアップ配列要素の下の表
この方法は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;

}