求助,链表快排
程序代码:#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct list{
int num;
int n; //快排中的序号,比如第一个,第二个
char ch[20];
list *left,*right;
};
int size=sizeof(struct list);
void qsort(struct list *x,struct list *y);
void main()
{
list *head,*p,*begin,*end;
int number,i;
char c[20];
head=NULL;
i=0;
begin=(struct list *) malloc(size);
end=(struct list *) malloc(size);
while (number!=0)
{
scanf("%d",&number);
if (number==0)
break;
scanf("%s",c);
i++;
p=(struct list *) malloc(size);
p->num=number;
p->n=i;
strcpy(p->ch,c);
p->left=head;
p->right=NULL;
head=p;
} //建立链表
begin=end=head;
while ((begin->left)!=NULL)
begin=begin->left;//头指针和尾指针
qsort(begin,end);
while ((begin->right)!=NULL)//感觉输出好像错了
{
printf("%d %s",begin->num,begin->ch);
begin=begin->right;
}
}
void qsort(struct list *x,struct list *y)//这是递归的快排
{
int mid;
struct list *i,*j,*temp;
mid=x->num;
i=x;j=y;
temp=(struct list *) malloc(size);
do
{
while((i->num<mid)&&(i!=NULL))
i=i->right;
while((j->num>mid)&&(j!=NULL))
j=j->right;
if ((j->n)>=(i->n))
{
strcpy(temp->ch,i->ch);//感觉是这里错。。。。
strcpy(i->ch,j->ch);
strcpy(j->ch,temp->ch);
temp->n=j->n;j->n=i->n;i->n=temp->n;
}
if (i->n<=y->n)
qsort(i,y);
if (j->n>=x->n)
qsort(x,j);
}while ((j->n)>=(i->n));
free(temp);
}求大神给点指导。。。。是链表的快排






