想要对链表进行排序,但我的代码不想:)
这是:
void swap(element *p,element*q) {
int aux;
aux=p->info;
p->info=q->info;
q->info=aux;
}
void ordonare(element *lista) {
element *p,*q;
for(p=lista; p!=NULL; p=p->urmator) {
if(p->info>p->urmator->info) {
swap(p,p->urmator);
}
}
}
如果这样做,它只会对值进行排序,而不会更改节点'位置。 我似乎无法在这里找到错误,如果您还能指出节点将改变其位置的解决方案,我将不胜感激。
谢谢, 拉杜
更新
上面的代码有效,但正如@ Daniel.S所提到的,它只在列表中进行一次迭代。
我应该在什么条件下进行迭代才能进行排序?
谢谢!:)
答案 0 :(得分:2)
查找merge sort,它非常适合列表并且易于实施。该链接有一个示例实现:
合并排序通常是排序链表的最佳选择:在这种情况下,以这样的方式实现合并排序相对容易,它只需要Θ(1)额外空间和慢随机访问性能一个链表使一些其他算法(如quicksort)表现不佳,而其他算法(如heapsort)完全不可能。
答案 1 :(得分:0)
您的排序算法不完整。你在循环中缺少部分。对列表进行一次循环迭代是不够的。例如:
您有列表{3,2,1}。如果您使用算法对其进行排序,它将首先比较3和2并交换它们,然后得到
{2,3,1}然后它将比较3和1并交换它们。然后你得到{2,1,3}。您的算法在这里完成,但列表尚未排序。
根据您要实施的算法(例如冒泡排序),您必须添加其他代码。
您想要实施哪种算法?