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

原创 2013年12月05日 00:04:43

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<stdio.h>
 
/* 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/

编程之美

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

问题:对于一个由N个整数组成的数组,需要比较多少次才能把最大值和最小值的数找出来呢?                 解法一:将寻找数组中的最大值和最小值看成是两个独立的问题。分别求出最大值和...
  • xiaoding133
  • xiaoding133
  • 2012年10月06日 16:16
  • 3875

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

最简单的方法就是N中的每个数分别和max,min比较,看似2N次比较,其实大于max的就不必和min比较,小于min的也不必和max比较,因此比较的次数不足2N次,程序如下: bool MaxMin...
  • bertzhang
  • 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
  • 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
  • yiranyaoqiu
  • 2013年10月13日 09:51
  • 1196

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

有一个一维数组{7,3,4,9,3,2,6,10,16,12,4},找出最大的值和最小的值并打印输出package com.homework.lhh;public class Ex01 { p...
  • blue_hh
  • blue_hh
  • 2017年07月22日 15:36
  • 712

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

算法导论(第三版)第九章里提出过一个比较有意思的小问题:如何在最短的时间内求出一个n长数组中最大和最小问题。下面就来做一个实现。         思路:         ①把数组分成两个两个一...
  • cyp331203
  • cyp331203
  • 2015年01月26日 10:05
  • 1419

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

题目:给定一个数组,找出数组中的最大值和最小值 算法思路一:使用两个“游标”,p代表最大值,q代表最小值,初始为数组的第一个和第二个,不断向后移并且做比较,每次移动时将较大值与p比较,将p赋为较...
  • yipiankongbai
  • yipiankongbai
  • 2014年04月20日 10:01
  • 3817

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

首先对10个数按从小到大排序,然后第一个元素就是最小的,最后一个元素就是最大的 data segment mes1 db 'the max:$' mes2 db 'the min:$' a d...
  • xiongyaoqiongyao
  • xiongyaoqiongyao
  • 2012年12月05日 20:57
  • 3172

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

以下五种解法可以寻找到数组中的最大值和最小值; 1)问题分解法。     把本题看做两个独立的问题,而非一个问题,所以,每次分别找出最小值和最大值即可,此时,一共需要遍历两次数组,比较次数为2N次...
  • JohnLee_chun
  • JohnLee_chun
  • 2016年09月14日 22:27
  • 5699

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

该程序输出结果: 数组A的元素包括:74 48 30 17 62 数组的最大值是:74 数组的最小值是:17 程序说明如下: 1.第6行声明整数变量i 做为循环控制变量及数组的索引:另外也声明存...
  • zhangtongyuan0909
  • zhangtongyuan0909
  • 2017年04月12日 14:19
  • 16531
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:同时找出在数组中的最大值、最小值
举报原因:
原因补充:

(最多只允许输入30个字)