2015-02-07 3 views
0

다음 코드는 테이블에서 최대 값과 최소값을 찾습니다.테이블의 최소값과 최대 값

최대 값 (최소값은 아님)의 경우 해당 위치가 필요합니다.

편집이 완료되었습니다.

코드의 기능이 올바른지 또는 다른 쉬운 방법이 있는지 알고 싶습니다.

#define MAX_VALUE 0 
#define MIN_VALUE 1 
typedef Min_Max_Data 
{ 
    unsigned char Value; 
    unsigned char Position; 
}Min_Max_Data_t; 

Min_Max_Data_t Data; 

void Min_Max_Data_Value(unsigned char *Array 
         , unsigned char Min_Max 
         , unsigned char Dim) 
    { 
    unsigned char i; 

    switch (Min_Max) 
    { 
    case MAX_VALUE: 
    { 
    Data.Value = *Array; 
    Data.Position = 0; 

    for (i = 0; i < Dim; i++) 
    { 
     if (*(Array + i) > Data.Value) 
     { 
      Data.Value = *(Array + i); 
      Data.Position = i; 
     } 
    } 
    break; 
    } 
    case MIN_VALUE: 
    { 
    Data.Value = *Array; 
    Data.Position = 0; 
    for (i = 0; i < Dim; i++) 
    { 
     if (*(Array + i) < Data.Value) 
     { 
      Data.Value = *(Array + i); 
     } 
    } 
    break; 
    } 
    default: 
    break; 
    } 
} 

답변

0

min과 max를 얻는 가장 쉬운 방법은 아마도이를 정렬하는 것이지만, 작성한 코드는 성능에 가장 적합합니다. 그러나 재귀를 조사해야합니다.

typedef struct { 
int Min; 
int Max; 
}ValuesStruct; 

ValuesStruct yourFunction(int[] array, int start, int end) { 
    ValuesStruct yourMinMax; 
    int index, i; 
    int n = end - start + 1; 
    if (n%2 != 0){//odd 
     yourMinMax.Min = array[start]; 
     yourMinMax.Max = array[start]; 
     index = start + 1; 
    } 
    else{//even 
     int max, min; 
     if (array[start] < array[start+1]){ 
      yourMinMax.Min = array[start]; 
      yourMinMax.Max = array[start+1]; 
      index = start + 2; 
     } 
     for (i = index; i < n-1; i = i+2){ 
      if (array[i] < array[i+1]){ 
       min = array[i]; 
       max = array[i+1]; 
      } 
      else{ 
       min = array[i+1]; 
       max = array[i]; 
      } 
      if (yourMinMax.Min > min) yourMinMax.Min = min; 
      if (yourMinMax.Max < max) yourMinMax.Max = max; 
     } 
     return yourMinMax; 
    } 
} 

이 코드는 비교가 적지 만 반드시 더 빠를 필요는 없습니다.

관련 문제