2015-02-07 55 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

获取最小值和最大值的最简单方法可能是对它们进行排序,但是您编写的代码最适合性能。 但是你应该看看递归。

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; 
    } 
} 

此代码将比较少,但不一定更快。