求陣列最大最小值我們可以用遍歷或者最簡單的排序方法來實現,但是那樣子的時間複雜度將會大很多,因此我們可以採用分治思想來求最大最小值,即先求左右兩部分,即先求出左半部分的最大最小值,再求出右半部分的最大最小值,然後再把左右兩部分的最大最小值合起來求總的最大最小值。
**如下:
#includeusing namespace std;
/* author:chhuaj
date:2013.9.13
description:求陣列的最大和最小值(採用遞迴法)
*/void max_min(int *num,int l,int r,int &maxnum,int &minnum)
if(l+1==r) //陣列有兩個元素
else
return; //確定最大最小值之後必須返回,否則將進入死迴圈。
} int m =(l+r)/2;
int lmax,lmin;
max_min(num,l,m,lmax,lmin); //遞迴求左半部分最大最小值
int rmax,rmin;
max_min(num,m,r,rmax,rmin); //遞迴求右半部分最大最小值
maxnum = max(lmax,rmax);
minnum = min(lmin,rmin); //總的最大最小值
}int main()
; int maxnum,minnum;
max_min(a,0,9,maxnum,minnum);
cout<
分治法求陣列最大最小值
常規的做法是遍歷一次,分別求出最大值和最小值,但我這裡要說的是分治法 divide and couquer 將陣列分成左右兩部分,先求出左半部份的最大值和最小值,再求出右半部份的最大值和最小值,然後綜合起來求總體的最大值及最小值。這是個遞迴過程,對於劃分後的左右兩部分,同樣重複這個過程,直到劃分區間...
遞迴 求陣列內最小值
主要是訓練對遞迴的感覺 把思想由遍歷轉換到遞迴上 其他文章和題目 遞迴與動態規劃 奇怪的比賽 李白打酒 public class 陣列最小值 system.out.println process arr,0,arr.length 1 public static int process int arr...
求陣列的最大值最小值
演算法陣列中的最大值和最小值 方法1 遍歷兩次求出最大值最小值 時間複雜度n 2 方法2 相鄰兩個數分為一組比較,大的放在偶數字,小的放到奇數字,然後在偶數字上找到最大值,在奇數字上找到最小值n 1.5 方法3 定義兩個變數max,min值,相鄰兩個數分為一組,比較出最大值和最小值,最大值和max比...