表中的最小值和最大值

时间:2015-02-07 21:22:16

标签: c arrays max min

以下代码在表格中找到最大值和最小值。

对于最大值(不是最小值),我还需要它的位置。

编译成功。

我想知道代码的功能是否正确或是否有其他简单的方法。

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

1 个答案:

答案 0 :(得分: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;
    }
}

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