您好我不熟悉算法,所以我要求帮助进行这种简单的比较。所以我有两个大小为N的无符号int数组。我需要比较哪一个更大。我如何比较是从左边的元素开始,如果A [i]大于B [i],那么A数组> B阵列。如果它们相等,我比较A [i + 1]和B [i + 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;
}
}
}
请告知是否有更好的方法来实现这一目标。非常感谢!!!
答案 0 :(得分:1)
这是一种完全正常且有效的方式:)没有比这更好的了。
如果所有元素都相同,请确保正确返回。
答案 1 :(得分:1)
查看标准库的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的所有元素。
答案 2 :(得分:0)
基本上没问题,但是要遵循.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
}