常規的做法是遍歷一次,分別求出最大值和最小值,但我這裡要說的是分治法(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 第二種想法就是建立堆,但是需要分別建立最小值堆和最大值堆,我們可以採取第三種做...