# 同时找出在数组中的最大值、最小值

If n is odd then initialize min and max as first element.
If n is even then initialize min and max as minimum and maximum of the first two elements respectively.
For rest of the elements, pick them in pairs and compare their
maximum and minimum with max and min respectively.

 #include /* structure is used to return two values from minMax() */ struct pair { int min; int max; }; struct pair getMinMax(int arr[], int n) { struct pair minmax; int i; /* If array has even number of elements then initialize the first two elements as minimum and maximum */ if (n%2 == 0) { if (arr[0] > arr[1]) { minmax.max = arr[0]; minmax.min = arr[1]; } else { minmax.min = arr[0]; minmax.max = arr[1]; } i = 2; /* set the startung index for loop */ } /* If array has odd number of elements then initialize the first element as minimum and maximum */ else { minmax.min = arr[0]; minmax.max = arr[0]; i = 1; /* set the startung index for loop */ } /* In the while loop, pick elements in pair and compare the pair with max and min so far */ while (i < n-1) { if (arr[i] > arr[i+1]) { if(arr[i] > minmax.max) minmax.max = arr[i]; if(arr[i+1] < minmax.min) minmax.min = arr[i+1]; } else { if (arr[i+1] > minmax.max) minmax.max = arr[i+1]; if (arr[i] < minmax.min) minmax.min = arr[i]; } i += 2; /* Increment the index by 2 as two elements are processed in loop */ } return minmax; } /* Driver program to test above function */ int main() { int arr[] = {1000, 11, 445, 1, 330, 3000}; int arr_size = 6; struct pair minmax = getMinMax (arr, arr_size); printf("\nMinimum element is %d", minmax.min); printf("\nMaximum element is %d", minmax.max); getchar(); }

Time Complexity: O(n)

Total number of comparisons: Different for even and odd n, see below:

       If n is odd:    3*(n-1)/2
If n is even:   1 Initial comparison for initializing min and max,
and 3(n-2)/2 comparisons for rest of the elements
=  1 + 3*(n-2)/2 = 3n/2 -2
http://www.geeksforgeeks.org/maximum-and-minimum-in-an-array/

• 本文已收录于以下专栏：

## 【编程之美】读书笔记：寻找数组中的最大值和最小值

• xiaoding133
• 2012年10月06日 16:16
• 3875

## 寻找数组中最大值和最小值

• bertzhang
• 2012年02月13日 19:36
• 8551

## C++数组求最大值及最小值最快方法（3[n/2]的时间效率）

#include using namespace std; //最小值和最大值的求解，时间复杂度最多是3[n/2],依据算法导论第九章. void swap(int &a,int &b) { in...
• liuhuiyan_2014
• 2015年05月04日 19:56
• 1814

## 较快速在一个数组中查找最大值和最小值

#include #define MAX 100001 int a[MAX]; int n; /* 时间复杂度为3*n/2 */ void swap(int i) { if(i==n-1) ...
• yiranyaoqiu
• 2013年10月13日 09:51
• 1196

## Java-找出数组里的最大值和最小值

• blue_hh
• 2017年07月22日 15:36
• 712

## 【算法导论】同时求数组的最大值和最小值

• cyp331203
• 2015年01月26日 10:05
• 1419

## 算法学习十五----找数组最大值和最小值

• yipiankongbai
• 2014年04月20日 10:01
• 3817

## 用汇编语言求一组数的最大值和最小值

• xiongyaoqiongyao
• 2012年12月05日 20:57
• 3172

## 如何寻找数组中的最大值和最小值

• JohnLee_chun
• 2016年09月14日 22:27
• 5699

## JAVA得到数组中最大值和最小值的简单实例

• zhangtongyuan0909
• 2017年04月12日 14:19
• 16531

举报原因： 您举报文章：同时找出在数组中的最大值、最小值 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)