如何写一个更清洁的比较

时间:2011-07-27 08:05:23

标签: algorithm

您好我不熟悉算法,所以我要求帮助进行这种简单的比较。所以我有两个大小为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;
       }
    }
}

请告知是否有更好的方法来实现这一目标。非常感谢!!!

3 个答案:

答案 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
}