sorting — проблема с крайними случаями в переполнении стека Quicksort

Я пишу программу для класса, который требует, чтобы я отсортировал список строк, представляющих десятичные числа. Я преобразовал первые 19 цифр каждой строки в unsigned long longи оставил оставшиеся цифры как stringдля использования, только если два unsigned long longподобрано точно. После преобразования строк в unsigned long longЯ выполнил на них быструю сортировку. Быстрая сортировка работает очень хорошо, за исключением двух значений, которые неуместны в окончательном отсортированном списке. Кто-нибудь замечает проблему в моем коде, которая может вызвать это?

 int partition(int bottom, int top, unsigned long long pivot, string lastDigits)
{
int left = bottom;
int right = top;
Number tmp;

while (left <= right)
{
while(pivot < num[right].firstDigits || pivot == num[right].firstDigits && lastDigits < num[right].lastDigits)
{
right--;
}

while(pivot > num[left].firstDigits || pivot == num[left].firstDigits && lastDigits > num[left].lastDigits)
{
left++;
}

if(left <= right)
{
tmp = num[right];
num[right]= num[left];
num[left]=tmp;
left++;
right--;
}
}

return left;
}void quickSort(int left, int right)
{
unsigned long long pivot = num[(left+right)/2].firstDigits;
int pivotpt;

if(right > left)
{
pivotpt = partition(left, right, pivot, num[(left+right)/2].lastDigits);
quickSort(left, pivotpt - 1);
quickSort(pivotpt + 1, right);
}

}

0

Решение

Задача ещё не решена.

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


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