C语言实现数组最小值和最大值的递归算法

该代码实现了一个递归的分治算法,用于查找数组中的最小值和最大值。代码示例包含详细注释,方便理解和学习。

#include <stdio.h>
#include 'StdAfx.h'
#include <stdlib.h>

struct MinMax {
    int min;
    int max;
};

struct MinMax findMinMax(int arr[], int low, int high) {
    struct MinMax result, leftResult, rightResult;
    int mid;

    // 当只有一个元素时,最大值和最小值都是该元素本身
    if (low == high) {
        result.min = arr[low];
        result.max = arr[low];
        return result;
    }

    // 当有两个元素时,比较二者大小
    if (high == low + 1) {
        if (arr[low] < arr[high]) {
            result.min = arr[low];
            result.max = arr[high];
        }
        else {
            result.min = arr[high];
            result.max = arr[low];
        }
        return result;
    }

    // 分割数组并递归求解左子问题和右子问题
    mid = (low + high) / 2;
    leftResult = findMinMax(arr, low, mid);
    rightResult = findMinMax(arr, mid + 1, high);

    // 比较左子问题的最大值和右子问题的最大值
    if (leftResult.max > rightResult.max) {
        result.max = leftResult.max;
    }
    else {
        result.max = rightResult.max;
    }

    // 比较左子问题的最小值和右子问题的最小值
    if (leftResult.min < rightResult.min) {
        result.min = leftResult.min;
    }
    else {
        result.min = rightResult.min;
    }
    
    return result;
}

int main() {
    int arr[] = { 5, 3, 8, 2, 1, 7, 6, 4 };
    int n = sizeof(arr) / sizeof(arr[0]);
    struct MinMax result = findMinMax(arr, 0, n - 1);

    printf('最小值:%d\n', result.min);
    printf('最大值:%d\n', result.max);

    return 0;
}

代码运行步骤

  1. 将上述代码保存到一个名为 homework3.c 的文件中。
  2. 使用 Visual Studio 2010 打开一个新的控制台应用程序项目。
  3. homework3.c 文件添加到项目中。
  4. 单击“生成”选项卡,然后选择“生成解决方案”来编译代码。
  5. 单击“调试”选项卡,然后选择“开始执行”来运行代码。

代码解释

  • findMinMax 函数实现了递归的分治算法,通过不断地将数组分割成更小的子数组,并递归地找出每个子数组的最小值和最大值,最终得到整个数组的最小值和最大值。
  • main 函数定义了一个数组,调用 findMinMax 函数计算数组的最小值和最大值,最后使用 printf 函数打印结果。

希望此代码能够帮助您更好地理解递归算法在寻找数组最小值和最大值中的应用。如有任何问题,请随时提问。

C语言实现数组最小值和最大值的递归算法

原文地址: https://www.cveoy.top/t/topic/oMJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录