2011-07-27 19 views
0

嗨我不熟悉算法,所以我要求幫助這個簡單的比較。所以我有兩個大小爲N的unsigned int數組,我需要比較哪一個更大。我比較的是我從左邊的元素開始,如果A [i]大於B [i],那麼A array> B array.if它們是相等的,我比較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; 
     } 
    } 
} 

請告知是否有更好的方法來實現這一點。非常感謝 !!!

+2

我認爲這是確定。但是在for循環結束時需要一個'return(EQUAL)'(當所有的A [i]都等於B [i])。 –

+0

根據你想要的結果,沒有更有效的方法來做到這一點。你將不得不通過索引來比較索引,這將使算法O(n) –

+0

@ypercube我相信你的意思是返回FALSE而不是等於:)並且當然你要確保我已經聲明瞭變量i一個int在某處...... – Jimmy

回答

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的所有元素

1

這是一個完全正常且有效的方法:)沒有比這更好的了。

只要確保在所有元素相同的情況下都能正確返回。

+0

那麼,你*可以*將數組轉換爲字符串並使用字符串比較,因爲大多數字符編碼方便地產生與數字相同的比較值...(沒有更快,但可能更漂亮的代碼) – bdares

+0

@bdares - 恕我直言,這就是爲簡單的事情扭動手... –

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 
}