算法导论——归并排序

北慕城南 提交于 2019-11-28 21:42:59
#include<stdio.h>

#define MAXN 100
//A[p,q] A[q+1,r]是两个有序数组,想办法把他们结合成一个有序数组
void merge(int A[],int p,int q,int r){
int n=0;
int i=p;
int j=q+1;
int tmp[MAXN];
while(i<=q&&j<=r){
if(A[i]<=A[j])
tmp[n++]=A[i++];
else
tmp[n++]=A[j++];
}
while(i<=q)
tmp[n++]=A[i++];
while(j<=r)
tmp[n++]=A[j++];
int k;
for(k=p;k<p+n;k++)
A[k]=tmp[k-p];
}

//归并排序主体
void merge_sort(int A[],int p,int r){
if(p<r){
int q=(p+r)/2;
merge_sort(A,p,q);
merge_sort(A,q+1,r);
merge(A,p,q,r);
}
}

int main(){
int A[]={2,56,3,7,86,1,6,43,12};
merge_sort(A,0,8);
int k;
for(k=0;k<=8;k++)
printf("%d ",A[k]);
printf("\n");
return 0;
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!