顺序统计算法[2019.5.25]

匿名 (未验证) 提交于 2019-12-02 23:42:01

题目:

  给定数组A[0..n-1],试设计一个算法,在最坏情况下用n+logn次比较找出A[0..n-1]中元素的最大值和次大值。

  输入:序列长度、数组A

  输出:maxnum、cmaxnum

Input:

  7

  1 2 3 4 5 6 7

Output:

  7 6

思想:

  用分治法将数组中的数分为两个序列,递归求出左右两个序列的lmax、lcmax、rmax、rcmax。同时比较一下,得出每次分出去的maxnum和cmaxnum,然后层层递归最后得到maxnum和cmaxnum。

Code:

 

#include <bits/stdc++.h> using namespace std; int num[1001]; void maxcmax(int i,int j,int &maxnum,int &cmaxnum){     int lmax,lcmax,rmax,rcmax,mid=(i+j)/2;     if(i==j) maxnum=cmaxnum=num[i];     else if(i=j-1){         maxnum=max(num[i],num[j]);         cmaxnum=min(num[i],num[j]);     }     else{         maxcmax(i,mid,lmax,lcmax);         maxcmax(mid+1,j,rmax,rcmax);         if(lmax>rmax){             maxnum=lmax;             cmaxnum=max(rmax,lcmax);         }         else if(lmax<rmax){             maxnum=rmax;             cmaxnum=max(lmax,rcmax);         }         else maxnum=cmaxnum=lmax;     }      } int main(){     int n,maxnum,cmaxnum;     cin>>n;     for(int i=0;i<n;i++)         cin>>num[i];     maxcmax(0,n-1,maxnum,cmaxnum);     cout<<maxnum<<' '<<cmaxnum<<endl;     return 0; }

 

转载请标明出处:顺序统计算法[2019.5.25]
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!