回 帖 发 新 帖 刷新版面

主题:请问这个排序是怎么考虑的?

是一个循环单链表。
我怎么想都是只循环一次,也就是排一次序。不是全部递增的。
但结论似乎是全部递增。。这里的"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;
}

回复列表 (共6个回复)

沙发

晕啊,没人帮忙一下吗

板凳

while(p->next!=head)
个人觉得问题出在这!!!
while里面的p->next!=head每次循环都会做一次的啊!!!

3 楼

首先可以判断出你想用冒泡排序,但冒泡要进行嵌套循环,而你的只进行了一次,即只比较了一次.
我的算法如下:
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 楼

看不懂楼上的i做什么用。。。

5 楼

哎呀,比如说8,3,2,9使用你这个算法后变为了3,2,8,9了。很明显嘛,算法错误嘛,与循环单链表没有关系的嘛!

6 楼

里面有个q=p->next
........
.......
p=q
这就是
p=p->next啊就是移动了吧
不过这只能在一次中找到最大的在最后一位.

我来回复

您尚未登录,请登录后再回复。点此登录或注册