分治演算法求陣列的最大值最小值
阿新 • • 發佈:2019-01-29
分治演算法是指將一個複雜的問題分成兩個或者幾個相同的小問題,再把子問題分成更小的問題,一直這樣迴圈下去,直到最後可以簡單的求解。原問題的解是子問題解的合併。
此演算法是許多高效演算法的基礎。今天是一個簡單的用分治法求一維陣列最大值最小值的問題。
在這裡使用了二分法來劃分。程式碼如下:
#include <stdio.h> #include <stdlib.h> void PartiongGet(int s,int e,int *meter,int *max,int *min) { int i=0; if(e-s<=1) { if(meter[e]>meter[s]) { if(meter[e]>*max) *max=meter[e]; if(meter[s]<*min) *min=meter[s]; } else { if(meter[e]<*min) *min=meter[e]; if(meter[s]>*max) *max=meter[s]; } return; } i = s+(e-s)/2; //使用二分法 PartiongGet(s,i,meter,max,min); PartiongGet(i+1,e,meter,max,min); } int main() { int i; int s,e; int max,min; int a[10] = {11,10,5,3,2,6,7,9,8,12}; s = 0; e = 9; max=11;min=3; //這裡的值注意有限制 for(i = 0;i<10;i++) { printf("%3d",a[i]); } PartiongGet(s,e,a,&max,&min); printf("\n%d %d",max,min); return 0; }