我正在为一个类编写程序,这个类要求我对表示十进制数的字符串列表进行排序。我将每个字符串的前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);
}
}