遞迴求陣列最大最小值(分治思想)

2021-06-18 08:54:36 字數 780 閱讀 6160

求陣列最大最小值我們可以用遍歷或者最簡單的排序方法來實現,但是那樣子的時間複雜度將會大很多,因此我們可以採用分治思想來求最大最小值,即先求左右兩部分,即先求出左半部分的最大最小值,再求出右半部分的最大最小值,然後再把左右兩部分的最大最小值合起來求總的最大最小值。

**如下:

#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比...