1. 程式人生 > >假設法求最大值和陣列的優點

假設法求最大值和陣列的優點

給定一個數組,求陣列中的最大值。

用假設法可解,思路是,把陣列中隨便一個元素設定為最大值,然後讓其它元素和它比,如果比當前最大值大,那麼最大值就被設定為這個元素,這個過程有點類似打擂臺,共有N個人打擂臺,其中一個人說,我是最厲害的,然後後面一個人把他打敗了,它就程式設計最大的了,前面就被淘汰了,擂臺上始終是當前最厲害的,那麼最後留在擂臺上的就是最厲害的。

想出假設法的人真的很聰明啊,我怎麼想不到呢?

 

假設是4個整型變數,那麼有以下程式碼

int a,b,c,d

int max=a;

if(b>=max)

max=b;

if(c>=max)

max=c;

if(d>=max)

max=d;

 

發現沒有,這三段if程式碼很相似,但似乎不會有簡便的辦法了。

 

如果把這四個變數放到陣列中,那麼我們可能會寫出這樣的程式碼:

int main(void)
{
	int num[] = { 35,34,67,67};
	int max = num[3];
	
	
		if (num[0] >= max)
		{
			max = num[0];
		}
		if (num[1] >= max)
		{
			max = num[1];
		}
		if (num[2] >= max)
		{
			max = num[2];
		}
		if (num[3] >= max)
		{
			max = num[3];
		}

	printf("max=%d",max);
	return 1;
}

  

可以發現幾段if程式碼就是陣列索引不一樣,其它地方都一樣,如下圖:

 

陣列索引是一個常數,我們可以用一個變數i來代替它,然後讓i的值從0開始,每次加1這樣變化,for迴圈正是有這樣的功能。

於是程式碼可以被優化成下面這樣。

 

 

int main(void)
{
	int num[] = { 35,34,67,67};
	int max = num[3];
	
	for (int i = 0; i <= 3; i++)
	{
		if (num[i] >= max)
		{
			max = num[i];
		}
	}
		
	printf("max=%d",max);
	return 1;
}

  

陣列從某些角度講有優化程式碼的功能。