程式設計之美 尋找陣列中的最大值和最小值

2021-06-15 11:21:32 字數 998 閱讀 8303

尋找乙個陣列裡的最大值和最小值

法一:分別遍歷一遍,次數o(2*n);

法二:根據書上的講述,

法三:主要在法二的基礎上改進,法二改變了原陣列,法三主要是不改變原陣列,定義兩個變數max和min,分別儲存最大值和最小值。

法四:分治法,這是重點。

typedef struct

ivaluetype;

ivaluetype search(int* arr,int m,int n)

else

return tmp;

}ivaluetype leftvalue=search(arr,m,m+(n-m)/2);

ivaluetype rightvalue=search(arr,m+(n-m)/2+1,n);

ivaluetype tmp;

if(leftvalue.max>rightvalue.max)

tmp.max=leftvalue.max;

else

tmp.max=rightvalue.max;

if(leftvalue.min>rightvalue.min)

tmp.min=rightvalue.min;

else

tmp.min=leftvalue.min;

return tmp;

}

複雜度 1.5n

推導見書上:

程式設計之美2 10 尋找陣列中的最大值和最小值

這個問題事實上非常easy解決。就是迴圈遍歷一遍陣列,然後找到陣列中存在的最大值和最小值就能夠了,書中主要討論的問題是比較次數較小的方法。只是。書中已經證明了,不管用什麼方法最少的比較次數也就是迴圈遍歷一遍的比較,結果是o 1.5n 的。所以。非常easy的能夠解決問題。第一種方法 函式宣告 voi...

程式設計之美4 求陣列中的最大值和最小值

方法1 暴力方法 遍歷一遍陣列,比較2 n次求出最大值和最小值 方法2 改進方法 破壞了原陣列 遍歷一遍陣列使得下標為偶數的元素較下標為奇數的元素大,再分別求出最大值和最小值 比較次數為3 n 2次 方法3 改進方法 不破壞原陣列 遍歷一遍陣列將相鄰元素中較大值和nmax比較,將較小值和nmin比較...

《程式設計之美》 求陣列的子陣列的最大值

問題 求陣列的子陣列的最大值 分析與解法 解法一 窮舉法,把每個子陣列的和求出來並比較,輸出最大值。時間複雜度為o n 2 int maxsum int arr,int n return max 解法二 將所給的陣列分為長度相等的兩部分,分別求出兩個陣列各自的最大子陣列的和,那麼原陣列的最大子陣列的...