递归求序列最大最小值

原创 2017年08月24日 16:45:20

这学期总算开了算法课了,不得不吐槽,大四上学期开这课,时间很尴尬。不多说了,第一节课老师留了道题,要求在一个递归函数里求序列的最大最小值。


算法思路:
1)如果数组长度为1,则最大值与最小值相等
2)如果数组长度为2,则最大值与最小值各位其中一个。
3)如果数组长度大于2,那么采用二分策略,递归求前一半的最大最小值,与后一半的最大最小值,之后两两比较后的数组的最大最小值。


代码如下:

#include <iostream>
#include <cmath>
using namespace std;

bool MinMax(int* num , int start, int end , int& Min , int& Max)
{
    //end小于start没有意义 
    if(end <start){
        return false;
    }else if(end == start){
        //序列长度为1,最大值与最小值相等 
        Min = Max = num[start];
    }else if(end - start == 1){
        //序列长度为2,一个为最小值,一个为最大值 
        Min = min(num[start],num[end]);
        Max = max(num[start],num[end]);
        return true;
    }else{
        //序列长度大于2,递归找前一半的最大最小值
        //后一半的最大最小值,两者进行比较 
        int mid = (start + end) / 2;
        int tmp_max,tmp_min;
        MinMax(num,start,mid,tmp_min,tmp_max);
        MinMax(num,mid+1,end,Min,Max);
        Max = max(tmp_max,Max);
        Min = min(tmp_min,Min);
        return true;
    }
}

int main()
{
    int size;
    cin>>size;
    int* num,Min,Max;
    num = new int[size];
    for(int i = 0 ; i< size; i++){
        cin>>num[i];
    }
    if(MinMax(num,0,size-1,Min,Max)){
        cout<<"Max = "<<Max<<endl;
        cout<<"Min = "<<Min<<endl;  
    }

    return 0;
}

截图:
这里写图片描述

版权声明:本文为博主原创文章,若需转载,请注明http://blog.csdn.net/qq_30091945

相关文章推荐

利用递归实现n个数中的最大值 和最小值

# include # define N 200 int findmax(int a[],int n); int main() { int n,a[N],i; printf("请输入n的值:\n"...

找出数组中的最小值--递归实现

#include #include #include #include using namespace std;const int MAXRANGE = 1000; int recursi...

使用递归方法求一个数组的最小值.

/*使用递归方法求一个数组的最小值.*/ #include #include using namespace std; #define MAXSIZE 20 int f(int A[...

用递归法求解一个数组中的最大值和最小值的问题

用递归法求一个给定的数组中的最大值和最小值。 分析,分治法,类似二分查找,可以先求解出左半部分的最大值和最小值,再求解出又半部分的最大值和最小值然后合并求解,就可以求解出整个数组中的最大值和最小值。...

201612-1 最大波动

试题编号: 201612-1 试题名称: 最大波动 时间限制: 1.0s 内存限制: 256.0MB 问题描述: ...
  • zhsy28
  • zhsy28
  • 2016年10月24日 19:37
  • 401

[ACM] POJ 2796 Feel Good (求序列中子序列的和与子序列中的最小数最大乘积)

Feel Good Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 9186   Acce...

递归求子集

#include using namespace std; //作为全局变量 char set[] = {'a', 'b', 'c', 'd'}; bool isVisited[4] = {fa...

笔试题&面试题:给定n个数,要求比较次数1.5n同时找出最大值和最小值

写出一个算法,对给定的n个数的序列,返回序列中的最大和最小的数. 设计出一个算法,只需要执行1.5n次比较就能找到序列中最大和最小的数吗?能否再少? 分析:要求比较次数为1.5n,使用一般的逐个遍...

写出一个算法,对给定的n个数的序列,返回序列中的最大和最小的数

思路:          冒泡的方法可以确定最大值和最小值,所以可以做两次冒泡,一次确定最大值吗,一次确定最小值,但是这样要比2n次,为了减小比较次数,可以先用n/2次比较把数组分成“小”和“大”两...

n个元素的数组中找出前K个最大数最有效算法O(nlg(k))

http://stevehanov.ca/blog/index.php?id=122 简单说就是用一个含有k个元素的堆维护这么一个前K个元素的序列,逐次扫描,动态调整,扫描完了,也就...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:递归求序列最大最小值
举报原因:
原因补充:

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