我试图优化一个函数,它在JavaScript中对字符串进行二进制搜索。
二分搜索要求您知道键是==枢轴还是<枢轴。
但这需要在JavaScript中进行两个字符串比较,这与C语言不同,后者具有strcmp()函数,该函数返回三个值(-1,0,+1),分别为(小于,等于,大于)。
在JavaScript中是否存在这样一个本地函数,可以返回一个三元值,以便在二进制搜索的每次迭代中只需要进行一次比较?
我试图优化一个函数,它在JavaScript中对字符串进行二进制搜索。
二分搜索要求您知道键是==枢轴还是<枢轴。
但这需要在JavaScript中进行两个字符串比较,这与C语言不同,后者具有strcmp()函数,该函数返回三个值(-1,0,+1),分别为(小于,等于,大于)。
在JavaScript中是否存在这样一个本地函数,可以返回一个三元值,以便在二进制搜索的每次迭代中只需要进行一次比较?
当前回答
可以使用比较操作符来比较字符串。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;
}
其他回答
在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;
}
您可以使用localeCompare()方法。
string_a.localeCompare(string_b);
/* Expected Returns:
0: exact match
-1: string_a < string_b
1: string_a > string_b
*/
进一步阅读:
MDN: String.prototype.localeCompare 是否有一个JavaScript strcmp()? 教程要点:JavaScript字符串- localeCompare()方法