请教C语言链表冒泡排序的问题

2024-11-23 02:37:34
推荐回答(2个)
回答1:

你交换的只是p1和p2,p没有动(也就是说前一个没修改)
也就是说,假设链表为(pa是头)
pa->pb->pc->pd

p1 == pb
p2 == pc
p3 == pc

交换pb和pc

则循环结束后
pa->next == pb
pb->next == pd
pc->next == pb

p1 == pc
p2 == pb
p3 == pc

if(p1!=p3)p0->next=p1; (永远不会执行)
p0 == pc

最终链表:
pa->pb->pd
也就是说pc没了,代表的意思就是,比较的两个元素,如果发生交换,会丢失比较小的那个。

修改:交换时必须同时改正上一个元素的指针

回答2:

P0是什么,什么地方定义的?还有是升序还是降序也没说明,链表冒泡排序一趟只能把最大值或最小值排在链表尾,所以你的算法逻辑不对,最好是用顺序表!