孔惊天上人 发表于 2021-3-18 17:49:25

冒泡排序对链表排序,为什么只执行了一次?

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;
   }
   }
}
运行结果只有一次交换

一座城里一颗心 发表于 2021-3-25 10:24:27

这个写法容易出错,例如p和p的next在还没确定是不是空的情况下就去访问其属性,程序会出现无法预知错误

全心守护你 发表于 2021-3-27 12:31:08

代码没细看,但既然是链表,那就最好不要用for(x=0;x<N-1;++x)之类的来作为循环条件,这样的容易访问空指针,导致程序异常
正确的做法是
while(p)
{
......
p = p->next;
}
这样的代码,阅读性也好
页: [1]
查看完整版本: 冒泡排序对链表排序,为什么只执行了一次?