输入方式有所不同
一:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct node
{
int *elem;
int length;
} sqlist;
void initlist(sqlist *l,int n,int m)
{
l->elem=(int *)malloc(sizeof(int)*(n+m));//
l->length=0;
}
void createlist(sqlist *l,int m,int n)//
{
int i;
for(i=1;i<=n+m;i++)
scanf("%d",&l->elem[i]);
l->length=n+m;
}
void quick(sqlist *l,int d,int g)
{
int i=d,j=g;
int x=l->elem[d];
if(d>=g) return ;
while(i<j)
{
while(i<j&&l->elem[j]>=x) j--;//老是把这儿的while写成if
l->elem[i]=l->elem[j];
while(i<j&&l->elem[i]<=x) i++;
l->elem[j]=l->elem[i];
}
l->elem[i]=x;
quick(l,d,i-1);//写成&l???
quick(l,i+1,g);
}
void print(sqlist *l)
{
int i;
for(i=1; i<l->length; i++)
printf("%d ",l->elem[i]);
printf("%d\n",l->elem[l->length]);
}
int main()
{
int m,n;
sqlist l;
scanf("%d%d",&m,&n);
initlist(&l,m,n);
createlist(&l,m,n);
quick(&l,1,n+m);
print(&l);
return 0;
}
二:
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int *elem;
int length;
} sqlist;
void initlist(sqlist *l,int n,int m)
{
l->elem=(int *)malloc(sizeof(int)*(n+m+2));//
l->length=0;
}
void createlist(sqlist *l,int m,int n)
{
int i;
for(i=1;i<=n+m;i++)
scanf("%d",&l->elem[i]);
l->length=n+m;
}
void quick(sqlist *l,int d,int g)
{
int i=d,j=g;
int x=l->elem[d];
if(d>=g) return ;
while(i<j)
{
while(i<j&&l->elem[j]>=x) j--;//老是把这儿的while写成if
l->elem[i]=l->elem[j];
while(i<j&&l->elem[i]<=x) i++;
l->elem[j]=l->elem[i];
}
l->elem[i]=x;
quick(l,d,i-1);//写成&l???
quick(l,i+1,g);
}
void print(sqlist *l)
{
int i;
for(i==1; i<l->length; i++)
printf("%d ",l->elem[i]);
printf("%d\n",l->elem[l->length]);
}
int main()
{
int m,n;
sqlist l;
scanf("%d%d",&m,&n);
initlist(&l,m,n);
createlist(&l,m,n);
quick(&l,1,n+m);
print(&l);
return 0;
}