气泡排序在链表中第一次起作用

时间:2014-02-26 21:02:35

标签: c++ data-structures linked-list

我正在尝试为我的链接列表进行冒泡排序,它从第一次开始不起作用,但是如果我将该函数调用两次,则排序很好,例如,如果列表是:9 8 7 6 5 4 3 2 1,分类返回4 3 2 1 5 6 7 8 9!这里有什么错误?

void sort() {

if(Head == NULL)
    cout << "Sorry but your list is empty! \n";
else {

    int i,j,temp,k = count();
    node *current,*nextNode;

    for(i=0; i<k-1; i++,k--) {
        current = Head;
        nextNode = current->Next;

        for(j = 1; j<k; j++) {
            if(current->item > nextNode->item){
                temp = current->item;
                current->item = nextNode->item;
                nextNode->item = temp;
            }
            current = current->Next;
            nextNode = nextNode->Next;
        }
    }
    cout << "Sorting Succeeded!\n";
}
}

2 个答案:

答案 0 :(得分:1)

不要增加i。由于j从1开始,因此i应始终从0开始循环 更改for(i=0; i<k-1; i++,k--)
for(i=0; i<k-1; k--)

for(i=0; i<k-1; i++,k--)应该运行k-1次。但是,当您递增i并递减k时,ik之间的差异会以两倍的速率降低,因此它会运行k/2次,因此仅k/2元素正在排序。当再次运行时,剩余的k/2元素也会被排序。

答案 1 :(得分:0)

更改以下2行

for(i=0; i<k-1; i++,k--) {

for(j = 1; j<k; j++) {

for(i = 0; i < (k - 1); i++) {

for(j = 0; j < (k - i - 1); j++) {