【算法】递归求数组指定范围内最大和次大的数值

来源:互联网 发布:ubuntu用vim写脚本 编辑:程序博客网 时间:2024/05/22 08:28

问题描述

从数组区间A[low, high]中找出最大的两个整数A[x1]和A[x2]

算法思路

这里我们使用递归分治的策略,把问题划分为求A[low, middle],B[middle + 1, high]的子问题。

递归基为

if(low == high){    x1 = low;    x2 = -99999; // 这里表示一个极小的数}

具体代码

#include <stdio.h>void max2(int A[], int low, int high, int &x1, int &x2){  // 当只有一个元素时,将low的值赋给x1,x2赋予足够小的负数  if(low == high)  {    x1 = low;    x2 = -99999;    return;  }  int middle = (low + high) / 2;  int x1L, x2L;  max2(A, low, middle, x1L, x2L);  int x1R, x2R;  max2(A, middle + 1, high, x1R, x2R);  // 判断  if(A[x1L] > A[x1R])  {    x1 = x1L;    x2 = (A[x2L] > A[x1R]) ? x2L : x1R;  }  else  {    x1 = x1R;    x2 = (A[x1L] > A[x2R]) ? x1L : x2R;  }}int main(int argc, const char * argv[]) {  int a[] = {7, 9, 123, 45, 12, 55, 69, 20, 11, 10};  int x1 = 0, x2 = 0;  max2(a, 0, 9, x1, x2);  printf("x1--%d, x2--%d\n", a[x1], a[x2]);    return 0;}
0 0
原创粉丝点击