使用Quicksort C++对数组进行排序

Sorting arrays with Quicksort C++

本文关键字:排序 数组 Quicksort C++ 使用      更新时间:2023-10-16

我正在做一个项目(用于学校),其中一个要求是对数组进行排序。所以我决定使用快速排序。(我选择它是因为它是一个我现在还不知道的算法)我设法了解了它是如何工作的,我还找到了一个在c++中实现它的选项。

void quicksort(size_t v[], size_t start_pos, size_t end_pos)
{
    size_t i, j, di, dj;
    if (start_pos < end_pos)
    {
        i = start_pos, j = end_pos;
        di = 0, dj = 1;
        do
        {
            while (i < j && (v[j] > v[i] || v[j] == v[i])) i += di, j -= dj;
            if (i < j)
                std::swap(v[i], v[j]), di = (di + 1) % 2, dj = (dj + 1) % 2;
        } while (i < j);
        if (i - start_pos > 1)
            sort(v, start_pos, i - 1);
        if (end_pos - i > 1)
            sort(v, i + 1, end_pos);
    }
}

我不明白的是…为什么在最后2个if语句中使用">1"?我希望有人能为我澄清这一点。谢谢!:)

这两个计算分别提供左细分和右细分的大小。

如果大小为1或零,则该部分已经排序,不需要任何进一步处理。

    if (i - start_pos > 1)  
        sort(v, start_pos, i - 1);  

只有当范围是两个或多个元素时,才会进行排序调用。正如巴里所指出的,这可能是

    if (i - start_pos > 1)  
        quicksort(v, start_pos, i - 1);        

胜利者的评论也切中要害。

如果你仔细看,代码的上部执行排列与在i处索引的pivot元素和最后两个if相对应的数组,如果我们对剩余部分即pivot元件的右侧和左侧进行排序;end_pos。