【发布时间】:2011-04-13 13:16:06
【问题描述】:
我知道冒泡排序可能不是最快的方法,但它可以接受。我只是在将算法调整为数组中的双链接列表时遇到了麻烦。
我的双链表有一个 int 类型和一个 string 类型来保存一个数字和一个单词。我的列表是使用我编写的按字母顺序排序的插入排序进行排序的,现在我需要按数字重新排序我的双链表,从大到小。
我的麻烦点是如何运行这个循环,以便正确地彻底排序,而不仅仅是一次。
这是我到目前为止所取得的成果:
void DblLinkedList::ReorderListNumeric()
{
dummy = new Node();
temphead = head;
temp = head->next;
while(tempTwo->next != NULL)
{
if(temp->wordCount < tempTwo->wordCount)
{
dummy->word = tempTwo->word;
dummy->wordCount = tempTwo->wordCount;
tempTwo->word = temp->word;
tempTwo->wordCount = temp->wordCount;
temp->word = dummy->word;
temp->wordCount = dummy->wordCount;
}
temp = tempTwo;
tempTwo = tempTwo->next;
}
}
【问题讨论】:
-
创建一个函数 swap(i,j) 以便您可以对其进行单元测试。
-
只是为了涵盖我们所有的基础:我假设您已经知道现有的链表实现和 C++ STL 中的内置排序功能,并且您当前的工作是爱好或学校作业。
-
在某些条件下,冒泡排序通常是最优的。不要因为它的渐近性能而打折扣。
-
是的,有些地方可以接受冒泡排序。我实际上用它来对我公司记录中的交易进行排序(一个简单的 OOo 电子表格,用于处理 txn 清单、资产负债表和损益表)。由于这大部分已经排序(除了最后的 3 或 4 笔交易),它通常非常快。而且,不,我不能使用标准排序,因为事务跨越多行,排序键只在第一行,我必须把它放在一起。通过在交替方向上进行传递,添加需要向上某处的 txn 也很有用。
标签: c++ linked-list double bubble-sort