[英]C++ radix sort using doubly-linked list
我正在开发一个使用基数排序对数字列表进行排序的程序,但是我一直陷于我认为是无限循环的问题。 我认为它要么是我的主要排序功能,要么是我的计数功能。 关于我在做什么错的任何想法吗?
void radix_sort(DLList& list)
{
DLList lstRay[10];
int ct = count(list);
int zeros = 0;
int tmp = 0;
int head = 0;
for(;ct >= 0; ct--)
{
while(!list.isEmpty())
{
head = list.deleteHead();
tmp = head / pow(10, zeros);
tmp = tmp % 10;
lstRay[tmp].addToTail(head);
}
for(int x = 0; x <=9; x++)
{
list.append(lstRay[x]);
}
zeros++;
}
}
int count(DLList& list)
{
int ct = 0;
int ct2 = 0;
int tmp = 0;
while(!list.isEmpty())
{
ct = ct2;
tmp = list.deleteHead();
while(tmp >= 0)
{
tmp = tmp/10;
ct2++;
}
if(ct2 < ct)
{
ct2 = ct;
}
}
return ct2;
}
您不会在每次迭代中清除lstRay
。 这意味着当您再次循环时,每个lstRay
会越来越长,因此您的列表呈指数增长。
但是,我感到惊讶的是它走得太远了-看来您的count函数将清除列表。
无限循环在count()内部。 temp上的循环永远不会终止,因为temp永远不会低于零。
radix_sort函数也有问题。 listRay [tmp]未初始化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.