欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

最小值和最大值

程序员文章站 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;
 }
相关标签: 最小值和最大值

上一篇: 数组元素的最大最小值

下一篇: