寻找最大值与最小值

原创 2018年04月15日 21:59:45

寻找最大值与最小值



概述


本文将给出寻找最大值和最小值的常规方法与改进方法,采用改进算法明显降低了比较次数,性能更优。

代码


#include <iostream>
using namespace std;

/**
  * It is used to get the maximum and minmum by using the common method.
  * @arr store the array value
  * @length store the array length
  * @author Junpeng Zhu
*/
int* commonMethod(int* arr, int length){
    int max = arr[0];
    int min = arr[0];

    for (int i = 1; i < length; i++){
        if(max < arr[i]){
            max = arr[i];
        }
        if(min > arr[i]){
            min = arr[i];
        }
    }
    int* results = new int[2];
    results[0]= min;
    results[1] = max;
    return results;
}

/**
  * It is used to get the maximum and minmum by using the enhancing method.
  * The number of comparsion decreases by comparing to the common method.
  * @arr store the array value
  * @length store the array length
  * @author Junpeng Zhu
*/
int* enhancingMethod(int arr[], int length){
    if(length % 2 == 0){
        int max = arr[0]>arr[1]?arr[0]:arr[1];
        int min = arr[0]<arr[1]?arr[0]:arr[1];
        for (int i = 2; i<length;){
            if(arr[i] > arr[i+1]){
                if(arr[i] > max){
                    max = arr[i];
                }
                if(arr[i+1] < min){
                    min = arr[i+1];
                }
                i += 2;
            }else{
                if(arr[i+1] > max){
                    max = arr[i+1];
                }
                if(arr[i]<min){
                    min = arr[i];
                }
                i += 2;
            }
        }
        int* results = new int[2];
        results[0] = min;
        results[1] = max;
        return results;
    }else{
        int max = arr[0];
        int min = arr[0];
        for (int i = 1; i < length ;){
            if(arr[i] > arr[i+1]){
                if(arr[i] > max){
                    max = arr[i];
                }
                if(arr[i+1] < min){
                    min = arr[i+1];
                }
                i += 2;
            }else{
                if(arr[i+1] > max){
                    max = arr[i+1];
                }
                if(arr[i]<min){
                    min = arr[i];
                }
                i += 2;
            }
        }
        int* results = new int[2];
        results[0] = min;
        results[1] = max;
        return results;
    }
}

int main()
{
    //int arr[] = {3,2,1};  //success
    //int arr[] = {2,8,7,1,3,5,6,4};   //success
    //int arr[] = {3,5,4,6,2,1};  //success
    //int arr[] = {3,5,4,6,2,1};  //success
    //int arr[] = {2,5,2,4,1,1};   //success
    int arr[] = {13,19,9,5,12,8,7,4,11,2,6,21};   //success
    //int arr[] = {8,10,7,16,10,3,9,7,20,2}; //success
    //int arr[] = {8,10,7,16,8,3,9,7,20,2}; //success, compare to the above example {8,10,7,16,10,3,9,7,20,2}
    //int arr[] = {1,1,3};  //success
    //int arr[] = {1,1,1,1,1,1,1};   //success
    int length = sizeof(arr)/sizeof(arr[0]);
    //int* results = commonMethod(arr,length);
    int* results = enhancingMethod(arr,length);
    int resultsLength  = sizeof(results)/sizeof(results[0]);
    //cout << sizeof(results)/sizeof(results[0]) << endl;
    for(int i = 0; i < resultsLength;i++){
        cout << results[i] << " ";
    }
    return 0;
}

参考资料


  1. 我的github: https://github.com/JunpengCode?tab=repositories
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jpzhu16/article/details/79953988

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

最简单的方法就是N中的每个数分别和max,min比较,看似2N次比较,其实大于max的就不必和min比较,小于min的也不必和max比较,因此比较的次数不足2N次,程序如下: bool MaxMin...
  • bertzhang
  • bertzhang
  • 2012-02-13 19:36:50
  • 8735

找出子数组中最大值最小值差值的最大值

一个题目,据说来自Hired online test #!/usr/bin/env python3 # coding: utf-8 """ Challenge 4: Deviation Given...
  • uuuououlcz
  • uuuououlcz
  • 2014-12-02 21:39:08
  • 421

数据结构——算法之(041)(寻找数组中的最大值和最小值)

【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱:Mr_chenping@163.com】 题目: 寻找数组中的最大值和最小值 题目分析: 1、时间复杂度0...
  • mr_chenping
  • mr_chenping
  • 2015-06-10 12:54:51
  • 1475

编程之美2.10寻找数组中的最大值和最小值Java版

/* * To change this license header, choose License Headers in Project Properties. * To change this...
  • TT285955925
  • TT285955925
  • 2016-06-20 17:46:11
  • 870

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

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

试着用最小的比较次数去寻找数组中的最大值和最小值。

每次比较相邻两个数,较大者与MAX比较,较小者与MIN比较,找出最大值和最小值。 方法如下:先将一对元素互相进行比较,然后把最小值跟当前最小值进行比较,把最大值跟当前最大值进行比较。因此每两个元素需...
  • martin_liang
  • martin_liang
  • 2014-08-19 17:20:38
  • 1243

编程之美——寻找数组中的最大值和最小值

编程之美——寻找数组中的最大值和最小值 问题描述:给出一个数组,包含N个整数,那么需要比较多少次找到最大值和最小值 注意:要想得到最大值和最小值,遍历一遍数组是不可避免的。我们...
  • chenglinhust
  • chenglinhust
  • 2012-12-08 11:29:12
  • 3472

数字之魅:寻找数组中的最大值和最小值

数组是最简单的一种数据结构。我们经常碰到的一个基本问题,就是寻找整个数组中最大的数,或者最小的数。这时,我们都会扫描一遍数组,把最大(最小)的数找出来。如果我们需要同时找出最大和最小的数呢? 对于一...
  • gogoky
  • gogoky
  • 2016-07-12 16:36:03
  • 1421

编程之美3:寻找数组中的最大值和最小值以及最大值和次大值

很开心,这是今天的第三篇文章啦!下午健身也感觉非常过瘾,托付宿舍妹子从日本代购的护肤品也到了。耳边漂浮着Hebe田馥甄的《魔鬼中的天使》文艺的声线,一切都好棒,O(∩_∩)O哈哈~。爱生活,爱音乐,爱...
  • XIAXIA__
  • XIAXIA__
  • 2015-04-10 10:04:24
  • 3414

编程之美2.10 寻找数组中的最大值和最小值

这个问题其实很容易解决,就是循环遍历一遍数组,然后找到数组中存在的最大值和最小值就可以了,书中主要讨论的问题是比较次数较小的方法,不过,书中已经证明了,无论用什么方法最少的比较次数也就是循环遍历一遍的...
  • DLUTBruceZhang
  • DLUTBruceZhang
  • 2014-10-08 10:09:04
  • 1836
收藏助手
不良信息举报
您举报文章:寻找最大值与最小值
举报原因:
原因补充:

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