本書第一個運用分治演算法的程式
#include <stdio.h>#include <string.h>#include <time.h>#define BUFFER_SIZE 10void Merge(int *a,int p,int q,int r){int n1=q-p+1;int n2=r-q;int b[n1+1];int c[n2+1];int n=n1+n2;int i=0;int j=0;int k=0;memset(b,0,sizeof(b));memset(c,0,sizeof(c));b[n1]=BUFFER_SIZE;//設定哨兵元素,確保比原數組中所有的數都大 ,注意溢出 c[n2]=BUFFER_SIZE;//設定哨兵元素,確保比原數組中所有的數都大 ,注意溢出 for(i=0;i<n1;i++){b[i]=a[i+p];}for(i=0;i<n2;i++){c[i]=a[i+q+1];}for(i=p,j=0,k=0;i<=r;i++){//注意i的初始值和結束值if(b[j]<=c[k]){a[i]=b[j];j++;}else{a[i]=c[k];k++;}}} void MergeSort(int *a,int p,int r){int q=0;if(p>=r){return;}q=(p+r)/2;MergeSort(a,p,q);MergeSort(a,q+1,r);Merge(a,p,q,r);}void Output(int *a,int len){int i=0;for(i=0;i<len;i++){printf("%d ",a[i]);}printf("\n");}int main(){ int i=0;int a[BUFFER_SIZE];memset(a,0,sizeof(a));srand((unsigned)time(NULL));for(i=0;i<BUFFER_SIZE;i++){a[i]=rand()%BUFFER_SIZE;} Output(a,BUFFER_SIZE);MergeSort(a,0,BUFFER_SIZE-1);Output(a,BUFFER_SIZE);system("pause");}