我正在尝试优化在JavaScript中对字符串进行二进制搜索的函数。
二进制搜索要求您知道键是==
枢轴还是<
枢轴。
但这需要JavaScript中的两个字符串比较,这与同类C
语言不同,后者具有strcmp()
返回三个值(-1, 0, +1)
(小于,等于,大于)的函数。
JavaScript中是否有这样的本机函数可以返回三进制值,以便在二进制搜索的每次迭代中只需要一个比较?
我正在尝试优化在JavaScript中对字符串进行二进制搜索的函数。
二进制搜索要求您知道键是==
枢轴还是<
枢轴。
但这需要JavaScript中的两个字符串比较,这与同类C
语言不同,后者具有strcmp()
返回三个值(-1, 0, +1)
(小于,等于,大于)的函数。
JavaScript中是否有这样的本机函数可以返回三进制值,以便在二进制搜索的每次迭代中只需要一个比较?
在JavaScript中,您可以检查两个字符串以获取与整数相同的值,因此您可以执行以下操作:
"A" < "B"
"A" == "B"
"A" > "B"
因此,您可以制作自己的函数,以与相同的方式检查字符串strcmp()
。
因此,这将是执行相同功能的函数:
function strcmp(a, b)
{
return (a<b?-1:(a>b?1:0));
}
You can use the comparison operators to compare strings. A strcmp
function could be defined like this:
function strcmp(a, b) {
if (a.toString() < b.toString()) return -1;
if (a.toString() > b.toString()) return 1;
return 0;
}
Edit Here’s a string comparison function that takes at most min { length(a), length(b) } comparisons to tell how two strings relate to each other:
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()
方法。进一步阅读: