【发布时间】:2014-09-23 22:28:35
【问题描述】:
我正在为学校做一个项目,我需要使用任何排序算法(最好是气泡)对链表进行排序 - 请注意,不允许交换每个节点数据,因为我希望交换节点。我无法粘贴我项目的所有代码,因为它很宽而且是西班牙语,我将向您展示我尝试实现节点交换的部分。
综上所述,项目本身很简单,一个链表,每个节点都包含一个人的信息(姓名、姓氏、年龄等)。
我必须按字母顺序对列表进行排序。请记住,我不能在函数中实现排序和交换算法(也就是说,我不能创建一个'swapNodes'函数并且他们在代码中实现它。
我设法按照这个逻辑交换了两个节点:
firstNode = auxiliar->next;
auxiliar-> next = firstNode->next;
firstNode->next = auxiliar;
这可以完美地交换 2 个节点。
问题是当我必须使用排序算法实现这个逻辑才能对所有列表进行排序时,这就是我需要你们帮助我的地方。
我已经检查了所有关于冒泡排序和节点交换的帖子,但我可以让它正常工作。
我的教授试图帮助我,以以下方式实现我的节点交换代码(请注意,作为示例,以下代码应按年龄排序):
while (flag == 1) {
auxiliar = firstNode;
flag = 0;
if (auxiliar->edad > auxiliarSiguiente->edad) {
firstNode = auxiliar->next;
auxiliar-> next = firstNode->next;
firstNode->next = auxiliar;
flag = 1;
}
auxiliar3 = firstNode;
while (auxiliar->next != NULL ) {
if (auxiliar->age > auxiliarNext->age) {
auxiliar2 = auxiliar->next;
auxiliar->next = auxiliar2->next;
auxiliar2->next = auxiliar;
auxiliar3->next = auxiliar2;
} else {
auxiliar = auxiliar->next;
}
auxiliar3 = auxiliar3->next;
}
}
再一次,当有 2 个节点时,这段代码工作得很好。如果有更多,它不会以正确的方式排序。此外,我不太确定我的教授使用的是哪种排序算法。
也许我的老师做错了,或者有更简单的方法。
非常感谢您的反馈,因为我自己无法找到解决问题的方法。
希望大家能帮帮我!
【问题讨论】:
-
你应该考虑有一个双向链表,否则你不能交换/插入/删除当前节点,只是节点之后
-
我不允许使用双向链表
标签: c algorithm list sorting linked-list