C语言算法练习之求二维数组最值问题
问题描述
求一个二维数组中的最小值和最大值。
解决方法
方法一:暴力搜索
暴力搜索是一种比较简单的方法,它的思路是遍历整个二维数组,比较每个元素的大小,找到其中的最小值和最大值。
代码示例:
#include <stdio.h>
int main()
{
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int i, j, min = arr[0][0], max = arr[0][0];
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
if(arr[i][j] < min)
min = arr[i][j];
if(arr[i][j] > max)
max = arr[i][j];
}
}
printf("min=%d,max=%d\n", min, max);
return 0;
}
输出结果:
min=1,max=9
方法二:利用顺序存储结构
顺序存储结构是指将一个二维数组展开成一维数组进行存储,然后利用一维数组的技巧来解决问题。
展开二维数组时,需要将二维坐标 (i,j) 转换成一维下标 k,具体的公式为:
k = i * 列数 + j
例如,对于一个 3 行 4 列的二维数组,当 (i,j) = (2,2) 时,k = 2 * 4 + 2 = 10。
代码示例:
#include <stdio.h>
int main()
{
int arr[3][3] = {
{3, 4, 1},
{6, 8, 2},
{9, 5, 7}
};
int a[9], i, min = arr[0][0], max = arr[0][0];
for(i = 0; i < 9; i++)
{
a[i] = arr[i / 3][i % 3];
if(a[i] < min)
min = a[i];
if(a[i] > max)
max = a[i];
}
printf("min=%d,max=%d\n", min, max);
return 0;
}
输出结果:
min=1,max=9
总结
以上就是两种求解二维数组最值问题的方法,由于暴力搜索方法的时间复杂度较高,因此在实际应用中应该选择顺序存储结构进行实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言算法练习之求二维数组最值问题 - Python技术站