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

#include <iostream> 
#include <iomanip> 
#include <cstdlib>
#include <ctime>
using namespace std;

const int MAXRANGE = 1000;
int recursiveMinimum( const int [], int, int );

int main()
{
   const int SIZE = 10;
   int array[ SIZE ];
   int smallest;

   srand( time( 0 ) );

   // 使用随机数初始化
   for ( int loop = 0; loop < SIZE; loop++ )
      array[ loop ] = 1 + rand() % MAXRANGE;

   cout << "Array members are:\n";

   for ( int k = 0; k < SIZE; k++ )
      cout << setw( 5 ) << array[ k ];

   cout << '\n';
   smallest = recursiveMinimum( array, 0, SIZE - 1 );
   cout << "\nSmallest element is: " << smallest << endl;
   system("pause");
   return 0;
} 

int recursiveMinimum( const int array[], int low, int high )
{
   static int smallest = MAXRANGE;

   // 当数组“第一个”元素值比当前最小值还小时,交换
   if ( array[ low ] < smallest )
      smallest = array[ low ];

   // 如果只有一个值,返回最小值,否则,递归
   return low == high ? 
      smallest : recursiveMinimum( array, low + 1, high );
} 
好的,以下是一个实现该功能的 Python 代码: ```python def find_max_min(arr, start, end): """ 在数组 arr 的下标范围 [start, end] 中找出最大值和最小值 """ if start > end: return None, None if start == end: return arr[start], arr[start] else: mid = (start + end) // 2 left_max, left_min = find_max_min(arr, start, mid) right_max, right_min = find_max_min(arr, mid+1, end) return max(left_max, right_max), min(left_min, right_min) ``` 这个函数使用了分治法的思想,将数组分成左右两部分,分别递归解左半部分和右半部分的最大值和最小值,然后将左右两部分的结果合并。具体来说,如果数组只有一个元素,那么它的最大值和最小值就是它本身;如果数组有多个元素,那么将数组分成左右两部分,分别递归解左半部分和右半部分的最大值和最小值,然后将左右两部分的最大值和最小值分别取最大值和最小值即可。 使用该函数可以找出数组中任意一部分数据的最大值和最小值,只需要指定数组的下标范围即可。例如,如果要找出数组 `a` 中下标从 2 到 5 的部分数据的最大值和最小值,可以这样调用函数: ```python a = [1, 3, 5, 2, 4, 6, 8, 7] max_val, min_val = find_max_min(a, 2, 5) print("max_val =", max_val) # 输出:max_val = 5 print("min_val =", min_val) # 输出:min_val = 2 ``` 这里的 `max_val` 和 `min_val` 分别是下标从 2 到 5 的部分数据的最大值和最小值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值