求助,链表快排
程序代码:
#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); }求大神给点指导。。。。是链表的快排