Manchester


私信TA

用户名:wenyajie

访问量:312878

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 62755
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路:
详解见1169题

参考代码:

#include<stdio.h>
#include<malloc.h>
#include<math.h>
void input(int *A,int n);
void output(int *A,int n);
void Mesort(int *A,int *B,int left,int right);
void Merge(int *A,int *B,int left,int middle,int right);
void copy(int *A,int *B,int left,int right);
/*--------------------------------------------------------*/
int main()
{
    int *A,*B;
    int n;
 while(scanf("%d",&n)!=EOF&&n!=0)
     {
         A=(int *)malloc(n*sizeof(int));
         B=(int *)malloc(n*sizeof(int));
         input(A,n);
         Mesort(A,B,0,n-1);
         output(A,n);
         free(A);
         free(B);
     }
return 0;


}
/*--------------------------------------------------------*/
void Mesort(int *A,int *B,int left,int right)
{
 if(left<right)
 {
    int i=(left+right)/2;
      Mesort(A,B,left,i);
      Mesort(A,B,i+1 ,right);
      Merge(A,B,left,i,right);
 copy(A,B,left,right);
 }
}
/*--------------------------------------------------------*/
void Merge(int *A,int *B,int left,int middle,int right)
{
int  i=left,j=middle+1,k=left;

while((i<=middle)&&(j<=right))
{
    if(A[i]<=A[j])
      B[k++]=A[i++];
     else
      B[k++]=A[j++];
}

if(i>middle)
    for(int q=j;q<=right;q++)
       B[k++]=A[q];
else
    for(int q=i;q<=middle;q++)
       B[k++]=A[q];

}
/*--------------------------------------------------------*/
void copy(int *A,int *B,int left,int right)
{
   for(;left<=right;left++)
       A[left]=B[left];
}
/*-------------------------*/
void input(int *A,int n)
{
   for(int i=0;i<n;i++)
      scanf("%d",&A[i]);
}
/*-------------------------*/
void output(int *A,int n)
{
   for(int i=0;i<n-1;i++)
      printf("%d ",A[i]);
      printf("%d\n",A[n-1]);
}

别忘点赞哦-.-

 

0.0分

6 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区