双重链接列表Bubblesort,反向方法现在已经破碎

时间:2014-11-24 15:44:13

标签: c++ sorting doubly-linked-list

所以我最近更新了我的Bubblesort(按字母顺序排序)以使用链表。

虽然现在我以前工作的反向方法打破了列表。 (如果我没有先进行单一列表冒泡排序,之前有效)

冒泡排序和交换。

void bubbleSort() {
    City *temp = NULL;
    City *current = head;
    while (current != NULL) { //for the rest in list
        if (current->getName().compare(current->next->getName()) > 0) { //compare distance
            if (current == head) {
                head = current->next;
            }
            swap(current, current->next);
        }
        current = current->next;
    }
}

交换

void swap(City* i, City* j) {
    if (i->previous)  i->previous->next = j;
    if (j->previous)  j->previous->next = i;
    if (i->next) i->next->previous = j;
    if (j->next) j->next->previous = i;
    City* temp;
    temp = i->previous;
    i->previous = j->previous;
    j->previous = temp;
    temp = i->next;
    i->next = j->next;
    j->next = temp;
}

这是现已打破的反向清单。

void reverseList() {
    City *temp = NULL;
    City *current = head;

    while (current != NULL) {
        temp = current->previous;
        current->previous = current->next;
        current->next = temp;
        current = current->previous;

    }
    if (temp != NULL) {
        head = temp->previous;
    }
}

问题我的冒泡排序错过了哪些内容?

1 个答案:

答案 0 :(得分:1)

一个错误是您的冒泡排序实施。它应该对数据进行多次传递,因为冒泡排序的复杂度为O(n*n),其中n是要排序的项目数。

换句话说,您需要在while中执行bubbleSort循环,直到您检测到数据已排序。这可以通过使用仅在发生swap时设置的布尔标志然后测试该标志,或者仅使n通过数据来完成。