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

原创 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/

编程之美

shell脚本统计文件中单词的个数

shell脚本统计文件中单词的个数 一、方案  http://www.cnblogs.com/youxuguang/p/5917215.html 方法一: (1)cat file|sed 's...
  • mmbbz
  • mmbbz
  • 2017年04月25日 10:43
  • 256

2013硕士毕业生薪资待遇

1:本人西电通院2013届毕业硕士,根据今年找工作的情况以及身边同学的汇总,总结各大公司的待遇如下,吐血奉献给各位学弟学妹,公司比较全,你想去的公司不在这里面,基本上是无名小公司了;但无名小公司有时也...

同时找出数组的最大值和最小值

虽说第一个方法在时间复杂度的分析上比第一个要少n/2,但是我在电脑上测试的结果,运行时间是差不多的。搞不懂~ //朴素算法:分别找出最大值和最小值。2n次比较 #include int A[5000...

汇编语言,找出最大值与最小值

STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DDATA SEGMENT MES1 DB 'The least number i...

二维数组最大值最小值

  • 2017年06月23日 10:13
  • 2KB
  • 下载

实现在一组数中找出最大值与最小值

废话不多说,直接上代码。。。 第一种方法 先利用数组中的sort方法对数组的数进行排序(我在这里采用升序的方式(return b-a;就是实现数组的降序)),然后排序后的数组首尾肯定是最小值和最大...

c语言数组参数最大值最小值

  • 2012年12月25日 15:03
  • 175KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:同时找出在数组中的最大值、最小值
举报原因:
原因补充:

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