483

JavaScript で文字列のバイナリ検索を行う関数を最適化しようとしています。

==二分探索では、キーがピボットかピボットかを知る必要があります<

ただし、JavaScript では 2 つの文字列比較が必要です。これは、 (より小さい、等しい、より大きい) の3 つの値を返す関数Cを持つ同様の言語とは異なります。strcmp()(-1, 0, +1)

二分探索の各反復で 1 つの比較のみが必要になるように、3 値を返すことができる JavaScript のようなネイティブ関数はありますか?

4

3 に答える 3

655

メソッドを使用できますlocaleCompare()

string_a.localeCompare(string_b);

/* Expected Returns:

 0:  exact match

-1:  string_a < string_b

 1:  string_a > string_b

 */

参考文献:

于 2010-01-30T10:55:27.050 に答える
77

JavaScript では、整数と同じ値の 2 つの文字列をチェックできるので、これを行うことができます。

  • "A" < "B"
  • "A" == "B"
  • "A" > "B"

したがって、 と同じ方法で文字列をチェックする独自の関数を作成できますstrcmp()

したがって、これは同じことを行う関数になります。

function strcmp(a, b)
{   
    return (a<b?-1:(a>b?1:0));  
}
于 2010-01-30T10:59:26.470 に答える
15

比較演算子を使用して文字列を比較できます。関数は次のstrcmpように定義できます。

function strcmp(a, b) {
    if (a.toString() < b.toString()) return -1;
    if (a.toString() > b.toString()) return 1;
    return 0;
}

編集これは、 2 つの文字列が互いにどのように関係しているかを示すために    、最大で min { length( a ), length( b ) } の比較を行う文字列比較関数です。

function strcmp(a, b) {
    a = a.toString(), b = b.toString();
    for (var i=0,n=Math.max(a.length, b.length); i<n && a.charAt(i) === b.charAt(i); ++i);
    if (i === n) return 0;
    return a.charAt(i) > b.charAt(i) ? -1 : 1;
}
于 2010-01-30T10:56:33.453 に答える