我正在尝试优化一个在 JavaScript 中对字符串进行二进制搜索的函数。
二分查找要求您知道键是==枢轴还是<枢轴。
但这需要 JavaScript 中的两个字符串比较,这与C具有strcmp()返回三个值(-1, 0, +1)(小于、等于、大于)的函数的语言不同。
JavaScript 中是否有这样一个本机函数,它可以返回一个三元值,以便在二分搜索的每次迭代中只需要进行一次比较?
我正在尝试优化一个在 JavaScript 中对字符串进行二进制搜索的函数。
二分查找要求您知道键是==枢轴还是<枢轴。
但这需要 JavaScript 中的两个字符串比较,这与C具有strcmp()返回三个值(-1, 0, +1)(小于、等于、大于)的函数的语言不同。
JavaScript 中是否有这样一个本机函数,它可以返回一个三元值,以便在二分搜索的每次迭代中只需要进行一次比较?
您可以使用该localeCompare()方法。
string_a.localeCompare(string_b);
/* Expected Returns:
 0:  exact match
-1:  string_a < string_b
 1:  string_a > string_b
 */
进一步阅读:
那么在 JavaScript 中,您可以检查两个字符串的值是否与整数相同,因此您可以这样做:
"A" < "B""A" == "B""A" > "B"因此,您可以创建自己的函数,以与strcmp().
所以这将是执行相同操作的函数:
function strcmp(a, b)
{   
    return (a<b?-1:(a>b?1:0));  
}
您可以使用比较运算符来比较字符串。一个strcmp函数可以这样定义:
function strcmp(a, b) {
    if (a.toString() < b.toString()) return -1;
    if (a.toString() > b.toString()) return 1;
    return 0;
}
编辑 这是一个字符串比较函数,它最多需要 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;
}