c 语言链表冒泡排序,出错了,求原因

2023-01-07 23:06

2个回答
你这个冒泡只虽然是两次循环,但做的工作还是只有一次循环交换;
因为你的循环中,外层执行一次后,你的指针就已经指向尾部了(下次循环时,指针并没有重新指向头)。此时,如果你循环里有判断尾结点了tail->next是否为NULL,就会发现问题。你实际代码中没有判断已经很危险了。
建议楼主好好调试一下运行过程。
int sort_ID(STU *head,int len){
int i,j;
if(len < 2)
return 0;
STU *pre = head; //前一节点
STU *cur = head->next; //交换的节点
STU *tail = cur->next; //交换的节点
for(i=1;ifor(j=0;jif(strcmp(cur->ID,tail->ID) > 0){
pre->next = tail; //交换
cur->next = tail->next;
tail->next = cur;

pre = tail; //交换成功后移
tail = cur->next;
}else{
pre = cur; //未交换平移
cur = tail;
tail = tail->next;
}
}
//重新下一轮查找
pre = head; //前一节点
cur = head->next; //交换的节点
tail = cur->next; //交换的节点

}
return 0;
}
相关问答
c 链表冒泡排序找错
2个回答2022-09-24 23:26
struct student *pai(struct student *head) { struct student *ptemp,*pPre,*pCurr,*pLastCur; ptemp =...
全文
【求解】链表冒泡排序,三个节点以上就错了
1个回答2022-06-21 14:02
mm要不我给你重写一个得了。。
单链表的冒泡排序!!求解答!!
1个回答2022-12-25 06:15
{ int value; Node* next; };void Sort(Node* head) { Node* tail = NULL; while(tail != head->next) ...
全文
关于冒泡法链表排序
2个回答2022-09-16 15:25
P 指向 的是没有交换前的 最后个节点 有可能和 倒数第二个 交换 所以p不一定是最后一个节点
什么叫冒泡排序
5个回答2022-09-26 22:07
举个例子: 比如说有一组数组:1,6,3,9,7,4 想要给它做排序,把这个数组从小到大的排列 这里就可以使用冒泡算法(就像河里的泡向上冒,小的泡会在大的泡的上面一样) 这里冒泡排序就是小的数字一个...
全文
鸡妈妈是怎么孵小鸡的
1个回答2024-07-03 15:43
鸡妈妈先把许多蛋生在用草铺成的鸡窝里。到时候,母鸡会浑身发热,这时她就会轻轻地伏的那些鸡蛋的上面。她日夜不停地用爱心孵化着这一窝蛋。在她的体温下,鸡蛋慢慢地发生变化。经过20多天的尽心孵化,小鸡在蛋...
全文
比较有创意的奖项名称有哪些?
1个回答2024-07-03 15:41
1、大红花奖:最佳新员工获得。 2、小蜜蜂奖:出勤天数最多者获得。 3、超人奖:综合评分最高者获奖。 4、林妹妹奖:一年中请病假较多者获奖。 5、莫名其妙奖:全年无考勤最多者获奖。 ...
全文
给推荐点好的动漫 小说
1个回答2024-07-03 15:41
动漫:东京食尸鬼 天降之物 某科学的电磁炮 魔法禁书目录 萝莉的时间 小说: 龙骑战机 苍穹龙骑 宅魔王 我的位面之旅 我的二次元禽兽人生 位面旅行指南
空山鸟语 为什么作者喜欢鸟叫?
1个回答2024-07-03 15:38
本文以抒情的比调描绘了山林中听鸟鸣的美好感受。表达了作者对一种生活方式的追求,呼唤人们走进自然,放飞心凉,回归本真,远离尘世中的名利困扰和世俗的羁绊追求天人合一的境界。还有就是,每次到山上来听到南方的...
全文