c语言mergesort 参数,C语言编写--Merge Sort

#include

#include

#include

#define N 10000

void merge(int A[],int p,int q,int r){

int n1=q-p+1;

int n2=r-q;

int i,j,k;

int* L;

int* R;

L=(int*)malloc(sizeof(int)*(n1+1));

R=(int*)malloc(sizeof(int)*(n2+1));

/*  int *L=new int[n1+1];

int *R=new int[n2+1];

*/                     /*此为C++语言,等价于上面的malloc*/

for(i=0;i

L[i]=A[p+i];       /*数组A[p...q]对应于数组L[0...n1-1]*/

for(j=0;j

R[j]=A[q+j+1];     /*数组A[q+1...r]对应于数组R[0...n2-1]*/

L[n1]=N;

R[n2]=N;         /*设置两个大数,称为哨兵牌,用于简化代码,一旦发生两张哨兵牌

同时出现的情况是,说明两堆牌中的所有非哨兵牌都放到了堆中去了

*/

i=0;

j=0;

for(k=p;k<=r;k++)

{

if(L[i]<=R[j])

{

A[k]=L[i];

i++;

}

else{

A[k]=R[j];

j++;

}

}

}

void merge_sort(int A[],int p,int r)

{

int q;

if(p

{

/*q=(int)((p+r)/2);   下取整可用floor(),上取整可用ceil(),包含在math.h中*/

q=floor((float)(p+r)/2.0);

merge_sort(A,p,q);

merge_sort(A,q+1,r);

merge(A,p,q,r);

}

}

/*

void main()

{

int a[10]={12,78,20,24,158,50,58,621,1475,2};

int i;

printf("排序前数组序列:\n");

for(i=0;i<10;i++)

{

printf("%5d",a[i]);

}

printf("\n排序前数组序列:\n");

merge_sort(a,0,9);

for(i=0;i<10;i++)

{

printf("%5d",a[i]);

}

getchar();

}

*/

void main(){

int* B;

int a;

int n;

scanf("%d",&n);

if(NULL==(B=(int*)malloc(sizeof(int)*n)))

{

printf("memory error!\n");

exit(1);

}

for(a=0;a

scanf("%d",&B[a]);

merge_sort(B,0,n-1);

for(a=0;a

printf("%6d",B[a]);

getchar();

getchar();       /*用于完成计算后等待查看结果,输入一个数结束程序,退出显示页面*/

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值