c++ - 返回原始值的快速排序实现

标签 c++ algorithm quicksort

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

#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;
}

最佳答案

您正在将 vector 的拷贝传递给函数。

您需要一个引用参数,就像您对 swap 所做的那样:

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

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

关于c++ - 返回原始值的快速排序实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43696002/

相关文章:

c++ - 如何在 C/C++ 中捕获 system() 的结果

c++ - 如何在 Linux 上使用 C++ 连接到 Teradata

c - 快速排序算法的超线性加速

c++ - 在 C++ 中仅使用单个 vector 作为输入参数的 QuickSort 方法

c - 快速排序的问题

java - 类成员与函数参数

C++ 继承 : Derived class pointer to a Base class invokes Derived class method

java - 找不到类?

C(初学者): Why won't my qsort work? 编辑:从一个错误到另一个错误

arrays - C 中数组的快速累积和