冒泡排序对链表排序,为什么只执行了一次?
void g(struct t *head){
struct t *p,*q,*k;
int x,y;
for(x=0;x<N-1;++x)
{ p=head;printf("%.2f %.2f %.2f\n",head->next->money,head->next->next->money,head->next->next->next->money);
for(y=0;y<N-x-1;++y)
{if(p->next->money<p->next->next->money)
{q=p->next;
k=p->next->next->next;
p->next=p->next->next;
p->next->next=q;
p->next->next->next=k;}
printf("%.2f %.2f %.2f\n",p->next->money,p->next->next->money,p->next->next->next->money);
p=p->next;
}
}
}
运行结果只有一次交换
这个写法容易出错,例如p和p的next在还没确定是不是空的情况下就去访问其属性,程序会出现无法预知错误 代码没细看,但既然是链表,那就最好不要用for(x=0;x<N-1;++x)之类的来作为循环条件,这样的容易访问空指针,导致程序异常
正确的做法是
while(p)
{
......
p = p->next;
}
这样的代码,阅读性也好
页:
[1]