最小值和最大值

《算法导论》第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;
 }

猜你喜欢

转载自blog.csdn.net/tao_ba/article/details/81116828