2015-02-07 11 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; 
    } 
} 

Этот код займет меньше сравнений, но не обязательно быстрее.

Смежные вопросы