我在编程的排序部分还不是很先进,所以我正在为我的算法寻求一些帮助。
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 是一个全局指针,它将始终具有列表中第一个/顶部元素的位置。
除了@Arun Saha 建议的更改之外,似乎还存在一些逻辑错误(交换后没有更新值),这就是为什么列表操作系统甚至在排序函数内部也没有按排序顺序打印的原因。下面的代码应该可以解决这个问题。
void sortList()
{
Item_PTR tmpNxt = current->nextItem;
Item_PTR tmpPTR = current;
while(tmpNxt != NULL)
{
while(tmpNxt != tmpPTR && tmpNxt->value < tmpPTR->value)
{
int tmp = tmpPTR->value;
tmpPTR->value = tmpNxt->value;
tmpNxt->value = tmp;
tmpPTR = tmpPTR->nextItem;
}
tmpPTR = current;
tmpNxt = tmpNxt->nextItem;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)