📌  相关文章
📜  方阵中最大值和最小值的 C++ 程序。

📅  最后修改于: 2022-05-13 01:55:05.792000             🧑  作者: Mango

方阵中最大值和最小值的 C++ 程序。

给定一个 n*n 阶的方阵,从给定的矩阵中找出最大值和最小值。

例子:

Input : arr[][] = {5, 4, 9,
                   2, 0, 6,
                   3, 1, 8};
Output : Maximum = 9, Minimum = 0

Input : arr[][] = {-5, 3, 
                   2, 4};
Output : Maximum = 4, Minimum = -5

天真的方法:
我们使用线性搜索分别找到矩阵的最大值和最小值。需要比较的次数是 n 2用于查找最小值和 n 2用于查找最大元素。总比较等于 2n 2

配对比较(高效方法):
从矩阵中选择两个元素,一个从矩阵的一行的开头,另一个从矩阵的同一行的末尾,比较它们,然后将它们中的较小者与矩阵的最小值进行比较,将它们中的较大者与矩阵的最大值进行比较矩阵。我们可以看到,对于两个元素,我们需要 3 次比较,因此为了遍历整个矩阵,我们总共需要 3/2 n 2 次比较。

注意:这是数组的最大最小值方法3的扩展形式。

C++
// C++ program for finding maximum and minimum in
// a matrix.
#include
using namespace std;
  
#define MAX 100
  
// Finds maximum and minimum in arr[0..n-1][0..n-1]
// using pair wise comparisons
void maxMin(int arr[][MAX], int n)
{
    int min = INT_MAX;
    int max = INT_MIN;
  
    // Traverses rows one by one
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j <= n/2; j++)
        {
            // Compare elements from beginning
            // and end of current row
            if (arr[i][j] > arr[i][n-j-1])
            {
                if (min > arr[i][n-j-1])
                    min = arr[i][n-j-1];
                if (max< arr[i][j])
                    max = arr[i][j];
            }
            else
            {
                if (min > arr[i][j])
                    min = arr[i][j];
                if (max< arr[i][n-j-1])
                    max = arr[i][n-j-1];
            }
        }
    }
    cout << "Maximum = " << max;
         << ", Minimum = " << min;
}
  
/* Driver program to test above function */
int main()
{
    int arr[MAX][MAX] = {5, 9, 11,
                        25, 0, 14,
                        21, 6, 4};
    maxMin(arr, 3);
    return 0;
}


输出:

Maximum = 25, Minimum = 0

请参阅有关方阵中的最大值和最小值的完整文章。更多细节!