我在编程的排序部分还不是很在行,所以我在寻找一些算法方面的帮助。

void sortList()
{
    Item_PTR tmpNxt = current->nextItem;
    Item_PTR tmpPTR = current;
    int a, tmp;

    while(tmpNxt != NULL)
    {
        a = tmpPTR->value;
        while(tmpNxt != tmpPTR && tmpNxt->value < a)
        {
            tmp = a;
            tmpPTR->value = tmpNxt->value;
            tmpNxt->value = tmp;
            tmpPTR = tmpPTR->nextItem;
        }
        tmpPTR = current;
        tmpNxt = tmpNxt->nextItem;
    }

}

排序前的列表状态:9 8 7 6 5 4 3 2 1
排序后:1 9 8 7 6 5 4 3 2
我不知道为什么…我在纸上玩了很多电脑,我觉得它应该有用…但也许其他人会发现问题。
Current是一个全局指针,它始终具有列表中第一个/顶部元素的位置。

最佳答案

这是因为函数sortList()没有改变“global”
表示列表头的变量。
请不要使用全局变量,当然也不要用于链接列表头(当你需要两份清单时,你会怎么做?)
我将把current函数重新设计为以下任意一个:

/* sort the list pointed to by phead and return the new head after sorting */
Item_PTR sortList( Item_PTR phead );

/* sort the list pointed to by *pphead */
void sortList( Item_PTR * pphead );

另外,让自己熟悉(即使你不能在即时项目中使用它们)到列表的C++标准库的接口,sortList() link

10-07 15:20