主题:请问这个排序是怎么考虑的?
Kc.StarX
[专家分:0] 发布于 2008-04-26 17:21:00
是一个循环单链表。
我怎么想都是只循环一次,也就是排一次序。不是全部递增的。
但结论似乎是全部递增。。这里的"p->next!=head"不是只能循环一次吗??
请教一下各位达人
前面的就不写了。。直到
p=head;
while(p->next!=head)
{q=p->next;
if(p->data>q->data)
{t=p->data;p->data=q->data;q->data=t;}
p=q;
}
最后更新于:2008-04-26 17:22:00
回复列表 (共6个回复)
沙发
Kc.StarX [专家分:0] 发布于 2008-04-27 18:47:00
晕啊,没人帮忙一下吗
板凳
foka [专家分:200] 发布于 2008-05-01 21:30:00
while(p->next!=head)
个人觉得问题出在这!!!
while里面的p->next!=head每次循环都会做一次的啊!!!
3 楼
lin1270 [专家分:60] 发布于 2008-05-05 17:23:00
首先可以判断出你想用冒泡排序,但冒泡要进行嵌套循环,而你的只进行了一次,即只比较了一次.
我的算法如下:
p=head;
int i=0;
while(i<n)//其中n为节点个数,当创建链表时,记录它
while(p->next!=head)
{q=p->next;
if(p->data>q->data)
{t=p->data;p->data=q->data;q->data=t;}
p=q;
i++;
}
4 楼
天之痕99 [专家分:40] 发布于 2008-05-06 11:02:00
看不懂楼上的i做什么用。。。
5 楼
34353520 [专家分:60] 发布于 2008-05-07 11:25:00
哎呀,比如说8,3,2,9使用你这个算法后变为了3,2,8,9了。很明显嘛,算法错误嘛,与循环单链表没有关系的嘛!
6 楼
buptwhisper [专家分:10] 发布于 2008-05-08 21:44:00
里面有个q=p->next
........
.......
p=q
这就是
p=p->next啊就是移动了吧
不过这只能在一次中找到最大的在最后一位.
我来回复