【问题标题】:quicksort implementation that returns original values返回原始值的快速排序实现
【发布时间】:2017-09-27 12:06:58
【问题描述】:

所以我尝试实现快速排序算法,但事情是这样的,因为我在调试器中遵循代码,所有元素都按排序顺序但是,该算法在元素之后的一些三个递归调用中取消了所有内容被排序。请告诉我出了什么问题

#include <iostream>
#include <vector>

using namespace std;

void swap(int& a, int& b)
{
    int temp = a;
    a = b;
    b = temp;
}

void quicksort(vector<int> A, int start, int end)
{
    if (start < end)
    {
        int pivot = A[start];
        int i, j = start;
        for (i = start + 1;i < end;i++)
        {
            if (pivot>A[i])
            {
                swap(A[i], A[j + 1]);
                j++;
            }
        }
        swap(A[start], A[j]);
        quicksort(A, start, j - 1);
        quicksort(A, j + 1, end);
    }
}

int main()
{
    vector<int> A = { 2,8,7,1,3,5,6,4 };

    quicksort(A, 0, A.size());

    for (int i = 0; i < A.size(); i++)
        cout << A[i] << endl;

    return 0;
}

【问题讨论】:

    标签: c++ algorithm quicksort


    【解决方案1】:

    您正在将向量的副本传递给函数。

    你需要一个参考参数,就像你对swap所做的那样:

    void quicksort(vector<int>& A, int start, int end)
    

    (顺便说一句,swap 在标准库中。)

    【讨论】:

      【解决方案2】:

      快速浏览后,我发现了以下内容:

      您需要将向量作为参考传递。请记住,quicksort 中的变量的生命周期只是暂时的(直到函数结束)。

      void quicksort(vector<int>& A, int start, int end)
      

      我也变了

      quicksort(A, start, j -1 );
      quicksort(A, j + 1, end);
      

      quicksort(A, start, j );
      quicksort(A, j + 1, end);
      

      因为您似乎跳过了 A[j]。 我认为它现在有效。您的主要问题是通过引用传递向量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-10
        • 2019-07-19
        • 1970-01-01
        • 2013-08-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多