給定陣列a1, a2, a3, ... an,要求編寫函式f輸出改陣列的最大值和最小值。假設陣列中的值兩兩不相同。
樸素的演算法可以通過遍歷的演算法,通過2n次的比較得到陣列中的最大值和最小值。實現**如下:
public class pair // 屬性 private int _max; public int max set } private int _min; public int min set } } public class searchminandmax ; public pair function1() else // 開始迴圈查詢 for (int i = 2; i < this.arr.length; ++i ) // 比max還大 if(this.arr[i] > max) } // 迴圈結束,返回結果 return new pair(max, min); } }
下面的過程將是不斷修正上面演算法的過程。考慮這個演算法:將陣列邏輯上分為兩個兩個為一組,然後比較每組中兩個值的大小,如果比max還大,修改max的值,同理對min,通過這種演算法的修正的話,需要的比較次數如下:1.5n。改演算法實現起來主要是需要判定陣列長度的奇偶性。**如下:
public pair function2() else // 遍歷分組數 int tmpmax = int.maxvalue, tmpmin = int.minvalue; for (int i = 2; i <= n; ++i) else // 更新整個陣列中的最大值和最小值 // 第二次比較 if (tmpmax > max) // 第三次比較 if(tmpmin < min) } // 是否存在剩下的元素 if (2 * n < this.arr.length) if(this.arr[2 * n] < min) } // 返回值 return new pair(max, min); }
下面繼續優化上面的演算法。使用分治思想。實現**:
尋找陣列中最大值和最小值
最簡單的方法就是n中的每個數分別和max,min比較,看似2n次比較,其實大於max的就不必和min比較,小於min的也不必和max比較,因此比較的次數不足2n次,程式如下 bool maxmin std vectorarray,t max,t min max array 0 min array 0...
js獲取陣列中最大值,最小值
es6拓展運算子.1 math.max arr 最大值 2 math.min arr 最小值 遍歷方法 1 var arr 12,14,34,566,34,98,77 2var max arr 0 3for var i 0 i 7 8 console.log max 最大值9 10for var i...
分治法查詢陣列最大最小值
大致說明下程式流程,呼叫find函式後,將判斷是否為最小子結構,如果不是則將它2分繼續判斷,如果是最小子結構,則把最小子結構的元素與全域性最大最小值做比較.這裡假設資料元素個數為8時,該程式走的流程應該是 0 7分解為0 3 0 3分解為0 1滿足最小子結構做完比較後return 繼續0 3分解的2...