1.题目
从数组区间A[lo, hi)中找出最大的两个整数A[x1]和A[x2],元素比较的次数,要求尽可能的少。
2.数据结构与算法
Algorithm:递归与分治
1.原问题:数组A的Max2?
2.分治:将数组A二分为数组A1与数组A2
3.两个子问题:数组A1的Max2与数组2的Max2?
4.合并:A1的Max2与A2的Max2这4个元素的Max2就是A的Max2
5.递归基:考虑子数组长度为2或3两种情况。
3.源代码
#include "stdafx.h"
#include <iostream>
using namespace std;
void max2(int a[], int lo, int hi, int &x1, int &x2){
//递归基
if(hi - lo == 2){
//2个数求max1, max2
if(a[lo] > a[lo+1]){
x1 = lo;
x2 = lo+1;
}else
{
x1 = lo+1;
x2 = lo;
}
return;
} //T(2)=1
if

本文介绍了使用递归与分治策略解决寻找数组中第二大的数(Max2)的问题。通过将数组二分,递归地解决子问题,并在不同情况下的时间复杂度分析,得出最坏情况下需要比较(5n/3)-2次,最好情况需比较(4n/3)-2次。相较于两次扫描和双指针法,递归分治在最坏情况下仍有较好的效率。
最低0.47元/天 解锁文章
1565

被折叠的 条评论
为什么被折叠?



