сортировка — C ++ радикальная сортировка с использованием двусвязного списка

Я работаю над программой для сортировки списка чисел с использованием радикальной сортировки, но я застреваю в бесконечном цикле. Я думаю, что это либо моя основная функция сортировки, либо моя функция подсчета. Есть идеи, что я делаю не так?

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;
}

0

Решение

Вы не очищаете lstRay на каждой итерации. Это означает, что когда вы снова зацикливаетесь, каждый lstRay становится все длиннее и длиннее, поэтому ваш список растет в геометрической прогрессии.

Тем не менее, я удивлен, что это зашло так далеко — похоже, ваша функция подсчета очистит список.

0

Другие решения

Бесконечный цикл находится внутри count (). Цикл на temp никогда не заканчивается, потому что temp никогда не опускается ниже нуля.

Функция radix_sort также имеет проблему. listRay [tmp] не инициализируется.

0

По вопросам рекламы [email protected]