尋找乙個陣列裡的最大值和最小值
法一:分別遍歷一遍,次數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 解法二 將所給的陣列分為長度相等的兩部分,分別求出兩個陣列各自的最大子陣列的和,那麼原陣列的最大子陣列的...