簡體   English   中英

表中的最小值和最大值

[英]Min and Max value in Table

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

對於最大值(不是最小值),我還需要其位置。

編譯成功。

我想知道代碼的功能是否也正確,或者是否還有其他簡單的方法。

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

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

此代碼將進行較少的比較,但不一定會更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM