嗨,我不熟悉算法,所以我寻求帮助来做这个简单的比较。所以我有两个大小为N的无符号整型数组,我需要比较哪一个更大。我比较的方法是从左边的元素开始,如果Ai大于Bi,那么A array.if >B array.if它们是相等的,我比较Ai+1和Bi+1,一个强有力的方法是:
BOOL checkArray(int[] A, int[] B) {
for(i=0; i< N; i ++){
if (A[i] > B[i]) {
return TRUE;
}else if (A[i] == B[i]) {
continue;
} else { \\ A[i] < B[i]
return FALSE;
}
}
}
请告知是否有更好的方法来实现这一点。非常感谢!
发布于 2011-07-27 16:10:06
看看标准库的strcmp实现。
bool checkArray (int [] a, int [] b)
{
int
i = 0;
while (i < N && a [i] == b [i])
{
++i;
}
return i < N && a [i] > b [i]; // return false if arrays equal
//return i >= N || a [i] > b [i]; // return true if arrays equal
}
然而,您的示例代码有一个未定义的函数路由-即A的所有元素都等于B的所有元素。
发布于 2011-07-27 16:08:46
这是一种非常正常和有效的方式:)没有比这更好的方式了。
如果所有元素都相等,请确保正确返回。
发布于 2011-07-27 16:25:16
基本上没问题,但是为了遵循.NET比较模式,你应该返回一个整数。这样,如果您需要的话,也可以直接使用它进行排序
我会像这样实现它:
public class StringArrayComparer : IComparer<String[]>
{
#region IComparer<string[]> Members
public int Compare(string[] x, string[] y)
{
if (x.Length != y.Length)
throw new ArgumentException("The two arrays dont have same size");
for (int i = 0; i < x.Length; i++)
{
int strComp = x[i].CompareTo(y[i]);
if (strComp != 0)
return strComp;
}
return 0;
}
#endregion
}
https://stackoverflow.com/questions/6841214
复制相似问题