1. 程式人生 > >分治法求和C語言-演算法設計實驗2

分治法求和C語言-演算法設計實驗2

題目:用分治法求和 
這裡我們舉出一個例子,利用分治法求陣列的和: 
比如: a[10] = {1,2,3,4,5,6,7,8,9,10} ,分治法的演算法之前我們學資料結構的時候,有過應用,資料結構學過的歸併排序,二分法,快速排序演算法等裡面用到的就是分治法的思想: 
如圖: 

把一個大問題,分解成若干個小問題,這裡把一個大的陣列分解成若干個小陣列,再合併把值返回。 
下面看程式程式碼:

#include<stdio.h>
#include<stdlib.h> 
int add(int *a,int left,int right);

int main()
{

    int
i,n; int *array; printf("請輸入陣列的大小:"); scanf("%d", &n); array = (int*) malloc(sizeof(int) * n); printf("請輸入資料(用空格分隔):"); for (i = 0; i < n; i++) { scanf("%d", &array[i]); } int sum=add(array,0,9); printf("%d\n",sum); return 0; } int add(int
*a,int left,int right) { int mid; if(left==right) { return a[left]; } else if (left == right-1) { return a[left]+a[right]; } else { mid=(left+right)/2; return add(a,left,mid)+add(a,mid+1,right); } }

執行結果: 

題目還是比較簡單的,但是利用分治法來求和在效率上明顯很低,用一個迴圈一次遍歷就可以實現求和了,而且效率比這個高。當然,這裡只是出於老師實驗要求的題目,能把實驗分混到手就行了。