1. 程式人生 > >求二維陣列最大最小值----利用函式呼叫形式(2種方法)

求二維陣列最大最小值----利用函式呼叫形式(2種方法)

(1)利用氣泡排序思想求二維陣列中的最大值

/*
利用函式呼叫形式,傳遞二維陣列名進行函式呼叫

設計求二維陣列中最小值、最大值的函式,在主函式中呼叫

利用氣泡排序思想求二維陣列最大值。

演算法思想:先對各行進行一次氣泡排序,使每行的最後一個數為當前行中最大值,
即二維陣列中的最後一列中的數,都是本行中的最大值。
然後對二維陣列中的最後一列進行一次氣泡排序,得到最後一列的最後一個數為本列中的最大值,
此列最大值即為二維陣列中的最大值。
注意,此時的二維陣列並不是真正的排序,此方法只是為了找到最大的數。
*/
#include <iostream>
using namespace std;
void print(int array[][4]);
int max(int array[][4]); //求二維陣列中最大值函式宣告
int min(int array[][4]); //求二維陣列中最小值函式宣告

int main()
{
	int a[3][4]={{7,9,8,10},{4,3,2,1},{1,6,5,0}}; //定義和初始化二維陣列
	int max_a,min_a,i,j;   
	print(a);   //輸出陣列元素值
	max_a=max(a); //函式呼叫求得二維陣列最大值
	min_a=min(a); //函式呼叫求得二維陣列最小值 
	cout<<"max of the array is :"<<max_a<<endl;
	cout<<"min of the array is :"<<min_a<<endl;
	return 0;
}

int max(int array[][4])  //求二維陣列中最大值函式定義,用氣泡排序的思想,大數後移
{
	int i,j,t;	
	for(i=0;i<3;i++)   //對每行進行一次氣泡排序,得到的每行最後一個數為本行中最大的數  
	{	for(j=0;j<3;j++)
		   if(array[i][j]>array[i][j+1])
			{t=array[i][j];array[i][j]=array[i][j+1];array[i][j+1]=t;}
	}

  	for(i=0;i<2;i++) //對最後一列進行一次氣泡排序,得到最後一個數為本列的最大值,即為陣列的最大值
		if(array[i][3]>array[i+1][3])
			{t=array[i][3];array[i][3]=array[i+1][3];array[i+1][3]=t;}	
    
	return array[2][3];
}

int min(int array[][4])  //求二維陣列中最小值函式定義,用氣泡排序的思想,小數後移
{
	int i,j,t;	
	for(i=0;i<3;i++)   //對每行進行一次氣泡排序,得到的每行最後一個數為本行中最小的數  
	{	for(j=0;j<3;j++)
		   if(array[i][j]>array[i][j+1])
			{t=array[i][j];array[i][j]=array[i][j+1];array[i][j+1]=t;}
	}

  	for(i=0;i<2;i++)  //對最後一列進行一次氣泡排序,得到最後一個數為本列的最小值,即為陣列的最小值
		if(array[i][3]<array[i+1][3])
			{t=array[i][3];array[i][3]=array[i+1][3];array[i+1][3]=t;}	
    
	return array[2][3];
}

void print(int array[][4])
{
	int i,j;
	cout<<"array is:"<<endl;
	for(i=0;i<3;i++)   //輸出陣列元素值
		{  for(j=0;j<4;j++)
				cout<<array[i][j]<<" ";
		   cout<<endl;
		}
}

(2)利用遍歷二維陣列求最大值

/*
利用函式呼叫形式,傳遞二維陣列名進行函式呼叫

設計求二維陣列中最小值、最大值的函式,在主函式中呼叫

求最大最小方法用遍歷陣列元素比較法
*/
#include <iostream>
using namespace std;

int max(int array[][4]); //求二維陣列中最大值函式宣告
int min(int array[][4]); //求二維陣列中最小值函式宣告

int main()
{
	int a[3][4]={{7,9,8,10},{1,2,3,4},{1,6,5,0}}; //定義和初始化二維陣列
	int max_a,min_a,i,j;
	max_a=max(a); //函式呼叫求得二維陣列最大值
	min_a=min(a); //函式呼叫求得二維陣列最小值
	cout<<"array is:"<<endl;

    for(i=0;i<3;i++)   //輸出陣列元素值
	{  for(j=0;j<4;j++)
			cout<<a[i][j]<<" ";
	   cout<<endl;
	}
	cout<<"max of the array is :"<<max_a<<endl;
	cout<<"min of the array is :"<<min_a<<endl;
	return 0;
}

int max(int array[][4])  //求二維陣列中最大值函式定義,用遍歷陣列元素求最大值
{
	int i,j;
	int result=array[0][0];
	for(i=0;i<3;i++)     
		for(j=0;j<4;j++)
			if(array[i][j]>result)
				result=array[i][j];
	return result;
}

int min(int array[][4])  //求二維陣列中最小值函式宣告,用遍歷陣列元素求最大值
{
    int i,j;
	int result=array[0][0];
	for(i=0;i<3;i++)
		for(j=0;j<4;j++)
			if(array[i][j]<result)
				result=array[i][j];
	return result;
}