Quicksort C ++中的边缘情况问题

时间:2015-05-04 05:25:28

标签: c++ sorting quicksort partition

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

没有答案