分治法求和C語言-演算法設計實驗2
阿新 • • 發佈:2019-02-17
題目:用分治法求和
這裡我們舉出一個例子,利用分治法求陣列的和:
比如: 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);
}
}
執行結果:
題目還是比較簡單的,但是利用分治法來求和在效率上明顯很低,用一個迴圈一次遍歷就可以實現求和了,而且效率比這個高。當然,這裡只是出於老師實驗要求的題目,能把實驗分混到手就行了。