1. 程式人生 > >分治演算法-----二分求最大最小

分治演算法-----二分求最大最小

例題1:給n個實數,求它們之中最大值和最小值,要求比較次數儘量小。

思路:用遞迴呼叫函式,在函式裡做出以下判斷:

1 若left==right(只有一個數) max和min都為這個數

2 若left==right-1(只有兩個數) max為較大的,min為較小的

3 除以上兩種以外 首先定義中間值d,在遞迴呼叫left到d與d+1到right的函式,max為兩函式返回值的最大值,min為最小值

核心思路如上

原始碼:

錯誤原因:思路沒錯,但11行的if前面沒有else,導致15行的else只建立在11行的if上,與思路不符,把if前面填個else即可:

沒有考慮到第11行如果沒有else,那樣15行的else只對應著11行的if,而與7行的if沒有關係,而當right1left1時,right1不等於left1加1,所以當left1

right1時,15行判斷沒有錯誤,照樣執行,與思路相悖;

經驗教訓:

在今後使用if…else進行判斷時,儘量用if…if …if 來代替(當然漏掉的可能性會增加),爭取不重複,不漏掉.