以下代码在表格中找到最大值和最小值。
对于最大值(不是最小值),我还需要它的位置。
编译成功。
我想知道代码的功能是否正确或是否有其他简单的方法。
#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 :(得分: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;
}
}
此代码将进行较少的比较,但不一定更快。