假設法求最大值和陣列的優點
阿新 • • 發佈:2018-11-11
給定一個數組,求陣列中的最大值。
用假設法可解,思路是,把陣列中隨便一個元素設定為最大值,然後讓其它元素和它比,如果比當前最大值大,那麼最大值就被設定為這個元素,這個過程有點類似打擂臺,共有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; }
陣列從某些角度講有優化程式碼的功能。