链表的快速排序不对

wind19 wind19 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
写了一个链表的快速排序,但排了几次之后就不对了,而且会crash,找了半天也不知道什么原因,各位路过的帮忙看一下,不胜感激。

#include <stdio.h>
#include <stdlib.h>

typedef struct NODE
{
int data;
struct NODE * next;
}node;

node * create_link()
{
node * p1 = (node *)malloc(sizeof(node));
node * p2 = (node *)malloc(sizeof(node));
node * p3 = (node *)malloc(sizeof(node));
node * p4 = (node *)malloc(sizeof(node));
node * p5 = (node *)malloc(sizeof(node));
node * p6 = (node *)malloc(sizeof(node));
node * p7 = (node *)malloc(sizeof(node));
node * p8 = (node *)malloc(sizeof(node));
node * p9 = (node *)malloc(sizeof(node));
node * p10 = (node *)malloc(sizeof(node));

p1->data = 5;
p1->next = p2;

p2->data = 3;
p2->next = p3;

p3->data = 6;
p3->next = p4;

p4->data = 1;
p4->next = p5;

p5->data = 2;
p5->next = p6;

p6->data = 8;
p6->next = p7;

p7->data = 7;
p7->next = p8;

p8->data = 10;
p8->next = p9;

p9->data = 9;
p9->next = p10;

p10->data = 4;
p10->next = NULL;

return p1;

}

void swap(node * n1, node * n2)
{
int temp = n1->data;
n1->data = n2->data;
n2->data = temp;
}

node * qsort(node * phead, node * ptail)
{
node * pleft=phead, *plast=phead, *pcur=phead,*pprelast=phead, *temp =NULL, *pre=NULL;

if(phead != NULL && ptail != NULL)
printf("phead is %d , ptail is %d\n",phead->data,ptail->data);

if(phead == NULL || phead->next == NULL || phead == ptail)
return phead;


pcur=phead->next;
plast = phead;

//pre=pprelast=phead;

while(pcur != ptail)
{
if (pcur->data < pleft->data)
{
swap(pcur,plast->next);
pprelast = plast;
plast=plast->next;
}
pcur = pcur->next;
}

if (pcur->data < pleft->data)
{
swap(pcur,plast->next);
pprelast = plast;
plast=plast->next;
}

swap(pleft,plast);

printf("plast is %d , pprelast is %d, plast->next is %d\n",plast->data,pprelast->data,plast->next->data);

temp = phead;
while(temp != NULL)
{
printf("%d ",temp->data);
temp = temp->next;
}
printf("\n");

qsort(pleft,pprelast);
qsort(plast->next,ptail);

return phead;

}

int main(void)
{
node * phead = create_link();
node * temp = phead, *pre=phead;

printf("before sort: ");
while(temp != NULL)
{
printf("%d ",temp->data);
pre=temp;
temp = temp->next;
}
printf("\n");

qsort(phead,pre);
printf("after sort: ");
while(temp != NULL)
{
printf("%d ",temp->data);
temp = temp->next;
}
printf("\n");


return 0;

}
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
wind19
C语言 70,039 成员 243,237 内容