2011-07-27 3 views
0

안녕하세요 저는 알고리즘에 익숙하지 않아이 간단한 비교를 위해 도움을 요청하고 있습니다. 그래서 크기가 N 인 2 개의 부호없는 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; 
     } 
    } 
} 

더 좋은 방법이 있는지 알려주십시오. 고마워요 !!!

+2

나는 그것이 OK 생각 : 당신이 이제까지

내가 그런 식으로 그것을 구현하는 것이 필요한 경우도 정렬에 직접 사용할 수 있습니다 처럼. 그러나 for 루프의 끝에서 (모든 A [i]가 B [i]와 같을 때)'return (EQUAL) '이 필요합니다. –

+0

원하는 결과에 따라 더 효율적인 방법이 없습니다. 알고리즘을 O (n) –

+0

@ypercube로 만드는 인덱스로 인덱스를 비교해야 할 것입니다. FALSE가 아닌 EQUAL을 리턴 할 것임을 확신합니다. 물론 변수 i가 선언되었는지 확인해야합니다. int 어딘가에 ... – Jimmy

답변

1

strcmp의 표준 라이브러리 구현을 살펴보십시오. 즉, 모든 요소가 확인

1

이것은 완벽하고 정상적인 방법입니다. 그보다 더 좋은 것은 없습니다.

모든 요소가 동일하면 올바르게 반환하십시오.

+0

글쎄요, 배열을 문자열로 변환하고 문자열 비교를 사용할 수 있습니다. 왜냐하면 대부분의 문자 인코딩은 숫자와 같은 비교 값을 편리하게 생성하기 때문입니다 ... (더 빠르지 만 더 예쁘지 않은 코드) – bdares

+0

@bdares - IMHO, 그게 간단한 일을 위해 손을 비틀면서 ... –

0

기본적 B.의 모든 요소에 동일하지만, 행 -

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 
} 

내 코드 예 그러나 미정의 기능 중 루트를 갖고

정수를 리턴해야하는 .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 
}