c++ - Quicksort 没有做任何事情,现在陷入了永远的循环

标签 c++ quicksort

<分区>

我正在尝试实现就地版本的快速排序。这是我的代码:

#include <vector>
#include <algorithm>

using namespace std;

size_t partition(vector<int>& v, size_t l, size_t r, size_t p)
{
    size_t pivot = v[p];
    swap(v[p], v[r]);
    size_t store = l;

    for (size_t i = l; l < (r-1); i++) {
        if (v[i] <= pivot) {
            swap(v[i], v[store]);
            store++;
        }
    }
    swap(v[store], v[r]);

    return store;
}

void quickSort(vector<int>& v, size_t l, size_t r)
{
    //If two or more elements
    if(l<r)
    {
        size_t pI = l;
        size_t nP = partition(v, l, r, pI);

        quickSort(v, (nP+1), r);
        quickSort(v, l, (nP-1));
    }
}

作为引用,我使用了 in-place version on wikipedia 的伪代码.

我遇到的问题是我一开始不小心调用了列表中间的函数作为最左边的arguemtn。该程序运行无误并输出了新列表,完全未更改且未排序(完全没有错误)。我发现了我的错误,现在我这样调用函数:

quickSort(v, 0, (v.size()-1));

Xcode 警告我,我陷入了一个永远的循环中

if (v[i] <= pivot)

就在那条确切的线上,好像比较触发了什么。如果你能帮助我,我会很高兴!

最佳答案

你的问题是你在比较l < r - 1但递增 i在 for 循环的每次迭代中。因此,无限循环。更改 for (size_t i = l; l < (r-1); i++) {for (size_t i = l; i < (r-1); i++) { .

关于c++ - Quicksort 没有做任何事情,现在陷入了永远的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21810337/

相关文章:

algorithm - 如果在 Hoare 快速排序中比较的元素相同怎么办?

c++ - 内存泄漏是否有可接受的限制?

c++ - FLTK:如何通过拖动使小部件可调整大小?

javascript - 使用随机枢轴在 Javascript 中实现 QuickSort

Java Quicksort分区方法

algorithm - 为什么 QuickSort Single pivot 比 3-way partition 更快?

c - 为什么这个快速排序算法的实现代码会出现 Segmentation fault 错误?

c++ - ORA-24347 : Warning of a NULL column in an aggregate function

c++ - 如何将字符串解析为 ctime 结构?

c++ - 为什么指针运算在这里不起作用?