最小值和最大值
程序员文章站
2024-03-15 21:30:06
...
《算法导论》第3版9.1提到了如何查找最小值和最大值
1:锦标赛排序:为了确定min/max,必须要做n-1次比较
2:将一对输入元素相互进行比较,然后把较小的与当前最小值比较,把较大的与当前最大值进行比较。
这样,对每两个元素共需3次比较,总的比较次数至多是3n/2
代码如下
struct node
{
int max;
int min;
};
node return_node(int a, int b)
{
node res;
if (a < b)
{
res.min = a;
res.max = b;
}
else
{
res.min = b;
res.max = a;
}
return res;
}
node min_and_max(int A[], int len)
{
node res, temp;
res = return_node(A[0], A[1]);
if (len % 2 == 0)
{
// i+=2 一定不能写成 ++i
for (int i = 2; i < len; i += 2)
{
temp = return_node(A[i], A[i + 1]);
if (temp.max > res.max)
res.max = temp.max;
if (temp.min < res.min)
res.min = temp.min;
}
}
else
{
for (int i = 2; i < len - 1; i += 2)
{
temp = return_node(A[i], A[i + 1]);
if (temp.max > res.max)
res.max = temp.max;
if (temp.min < res.min)
res.min = temp.min;
}
if (A[len - 1] > res.max)
res.max = A[len - 1];
else if (A[len - 1] < res.min)
res.min = A[len - 1];
}
return res;
}
上一篇: 数组元素的最大最小值