分治法求陣列最大最小值

2021-07-11 01:29:33 字數 994 閱讀 8603

常規的做法是遍歷一次,分別求出最大值和最小值,但我這裡要說的是分治法(divide and couquer),將陣列分成左右兩部分,先求出左半部份的最大值和最小值,再求出右半部份的最大值和最小值,然後綜合起來求總體的最大值及最小值。這是個遞迴過程,對於劃分後的左右兩部分,同樣重複這個過程,直到劃分區間內只剩乙個元素或者兩個元素。

#include 

#include

void maxandmin(int a,int left,int right,int

*maxvalue,int

*minvalue)

if(left+1 == right)

else

return;

}mid=(left+right)/2;

int lmax,lmin;

maxandmin(a,left,mid,&lmax,&lmin);

int rmax,rmin;

maxandmin(a,mid+1,right,&rmax,&rmin);

if(lmax>rmax)

*maxvalue=lmax;

else

*maxvalue=rmax;

if(lmin>rmin)

*minvalue=rmin;

else

*minvalue=lmin;

//printf("maxvalue=%d, minvalue=%d ",*maxvalue,*minvalue);

}int main()

; int b[6]= ;

int c[19];

int i;

int max;

int min;

maxandmin(a,0,12,&max,&min);

printf("max=%d, min=%d",max,min);

system("pause");

return

0;}

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

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

分治法查詢陣列最大最小值

大致說明下程式流程,呼叫find函式後,將判斷是否為最小子結構,如果不是則將它2分繼續判斷,如果是最小子結構,則把最小子結構的元素與全域性最大最小值做比較.這裡假設資料元素個數為8時,該程式走的流程應該是 0 7分解為0 3 0 3分解為0 1滿足最小子結構做完比較後return 繼續0 3分解的2...

分治法實現尋找陣列最大最小值

我們拿到乙個長度為k的一維陣列,想要在短時間內進行最大最小值的查詢,第一種想法就是現將陣列進行排序,這樣首末的元素分別是最小和最大的元素。排序演算法中,快速排序 歸併排序 堆排序等排序演算法的時間複雜度都是o nlogn 第二種想法就是建立堆,但是需要分別建立最小值堆和最大值堆,我們可以採取第三種做...