c语言课程设计学生成绩管理系统 排序不对

2025-04-16 08:36:06
推荐回答(1个)
回答1:

// 以ave的大小作减排序,这是选择排序,直接在原链表的基础上调换结点位置,
// 不用建立新链表。
void sort(mm *head) {
mm *p,*q,*pt,*qt;
head = load();
if(head == NULL) return;
output(head);
p = head;
while(p->next) {
q = p->next;
qt = p;
while(q->next) {
if(qt->next->ave < q->next->ave) qt = q->next;
q = q->next;

}
if(p == qt) p = p->next;
else {//以下操作有点乱,请画简单线图帮助理解
pt = p->next;
p->next = qt;
q->next = qt->next;
qt->next = pt;
}
}
printf("排序成功 !\n"); /*排序成功*/
output(head);
saveYN(head);
}