我在编程的排序部分还不是很在行,所以我在寻找一些算法方面的帮助。
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