我已经从各种来源在线进行了快速分类,并使用了将数据中心置于中心而不是像其他索引那样索引第一个或最后一个索引的技术来进行挖掘。

但是,这种排序最终使我的程序超过了80个元素,因为它冻结了,我认为这是因为它的内存效率低下。

它尝试排序的数据绝不是已经排序,并且是完全随机的。

void swapVecPos(int posOne, int posTwo)
{
    int temp = intVec[posOne];
    intVec[posOne] = intVec[posTwo];
    intVec[posTwo] = temp;
}

void sortShit(int leftValue, int rightValue)
{
    int left = leftValue;
    int right = rightValue;
    int pivot = intVec[(leftValue + rightValue) / 2];

    while(left <= right)
    {
        while(intVec[left] < pivot)
        {
            left++;
        }

        while(intVec[right] > pivot)
        {
            right--;
        }

        if(left <= right)
        {
            swapVecPos(left, right);
            left++;
            right--;
        }
    }

    if(leftValue < right)
        sortShit(leftValue, right);

    if(left < rightValue)
        sortShit(left, intVec.size() - 1);
}


谢谢

最佳答案

您的代码中有两个明显的错误。首先,如果有的话
枢轴是最小还是最大的时间
如果值是随机的,将会在某个时间发生),您离开
您正在处理的分区。如果分区是第一个
或最后一个,这可能会导致不确定的行为,但会导致
情况下,它不会给出正确的结果。

第二:递归时,第二次递归使用
intVect.size(),因此它将在所有
遗迹。这肯定是您所看到的症状的原因。

关于c++ - 为什么我的快速排序效率如此低下?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29580928/

10-14 18:57
查看更多