Я пишу программу для класса, который требует, чтобы я отсортировал список строк, представляющих десятичные числа. Я преобразовал первые 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);
}
}
Задача ещё не решена.