一次遍历返回序列的最大值和次大值

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013246898/article/details/52198482

启发3个数的比较,先比较2个数,分出大小,后将大值与第三个数进行比较,若第三个数大,则将大值赋给次大值,将第三个数赋给最大值,若第三个数小,则与次大值比较,若第三个数大则将第三个数赋给次大值,否则不变。
`/***************************************************************

File Name: find_max_premax_value.cpp
Author: tony
Mail: 445241843@qq.com
Created Time: 2016骞?8鏈?3鏃?鏄熸湡鍏?10鏃?6鍒?4绉? **************************************************************/`

#include<iostream>
#include<ctime>
#include<vector>
`using namespace std;

const int ARRAY_LENGTH = 20;
const int NUM_RANGE = 100;

template
vector& create_array(void);

template
bool find_max_premax_value(vector& arr, T & max, T & premax);

int main()
{
int max = 0, premax = 0;
vector arr = create_array();
for(auto x : arr)
cout << x << ‘\t’;
cout << endl;

if(find_max_premax_value(arr, max, premax))
    cout << "max = " << max << " . premax = " << premax << endl;

}

template
vector& create_array(void)
{
vector arr;
srand(static_cast(time(0)));
for(int i = 0; i < ARRAY_LENGTH;++i)
{
arr.push_back(rand() % NUM_RANGE);
}
return arr;
}

template
bool find_max_premax_value(vector& arr, T & max, T & premax)
{
if(arr.size() >= 3)
{
if(arr[1] < arr[2])
{
max = arr[2];
premax = arr[1];
}
else
{
max = arr[1];
premax = arr[2];
}

    for(int i = 3; i < arr.size(); ++i)
    {
        if(arr[i] > max)
        {
            premax = max;
            max = arr[i];
        }
        else
        {
            if(arr[i] > premax)
                premax = arr[i];
        }
    }
    return true;
}
else
    return false;

}

`
当你编译的时候会出现返回局部变量引用的警告,这里是没有问题的因为我将局部变量的引用赋值了变量,这是一个复制的过程,如果你将一个局部变量的引用返回给一个引用变量,那就会出现一些问题。这个问题会在下一篇博客中解答。

展开阅读全文

没有更多推荐了,返回首页