我试图对其进行冒泡排序,但它不起作用,有人能给我一个排序双链表的例子吗?
答案 0 :(得分:6)
mergesort很容易和,因为它会按顺序访问元素。
答案 1 :(得分:2)
一种合理的方法是创建一个指向链表中事物的指针数组, 排序列表(快速排序可能) 然后使用已排序的指针数组,将您的DLList重新连接到正确的位置 顺序。
尝试对没有随机访问权限的事物进行排序通常非常慢。
答案 2 :(得分:2)
标题中陈述的问题是“在C中对双链表进行排序的最佳方法是什么”。这是推车前的马。
您很少遇到“排序 data-structure-x 的最佳方法是什么?”相反,你说“我们需要什么样的数据结构才能满足 _ _要求?”如果你问自己“我们需要对此进行排序吗?”你可能会说“List ...不太好。或许我们应该使用一些能够像排序集一样自动排序的东西。我不完全熟悉C的内部工作,但我确信它有一个库利用排序树,如RedBlack或AVL树。
这就像是说“用绳子爬这个悬崖最好的方法是什么?”嗯,它可以做到,但它会很慢。如果我们已经调查了我们要经过的地形会更好,我们本可以带一个抓钩而不是一根绳子。通过提前规划并提供我们需要的资源。
并不是说能够“使用你所得到的东西”没有什么可说的,但通常列表是针对那些不需要排序的东西。
答案 3 :(得分:0)
我建议您专注于制作一小组经过良好测试的原语,例如
并使用它们来实现像
这样的交换容量一旦你有了这个,你应该能够实现你的,而不必担心你在链表上运行它:只需使用抽象原语。