arrays - 我在使用快速排序算法时遇到问题

标签 arrays algorithm sorting quicksort

我对快速排序算法有疑问。我在互联网上的不同页面以及维基百科上阅读过有关它的信息。但他们并没有详细解释太多。 当您选择最后一个元素作为枢轴元素时,我已经理解了他们的示例。在这种情况下,您选择另外两个变量 i, j,其中 i 将遍历数组,直到找到一个大于 pivotelement 和 j 的元素> 直到找到一个低于枢轴元素的元素。找到了,我们切换i,j显示的元素,继续...

我的问题是,你首先选择哪个元素作为i,j?假设我们给定了这个数组并且枢轴元素是 1:

9 1 4 2 0 7

我的i是什么,我的j是什么?

我认为第一个元素是i,所以9 j 是数组中的最后一个元素,所以 7?

最佳答案

维基百科解释得相当好:

The original partition scheme described by C.A.R. Hoare uses two indices that start at the ends of the array being partitioned, then move toward each other, until they detect an inversion

所以答案是肯定的,将i设置为数组的第一个元素,将j设置为数组的最后一个元素并移动它们直到它们相遇,这是基本的快速排序算法的分区部分。

每当您不确定时,最好检查一下确切的代码。有多种变体,您可以找到一个,例如here :

function quicksort(array)
    if length(array) > 1
        pivot := select any element of array
        left := first index of array
        right := last index of array
        while left ≤ right
            while array[left] < pivot
                left := left + 1
            while array[right] > pivot
                right := right - 1
            if left ≤ right
                swap array[left] with array[right]
                left := left + 1
                right := right - 1
        quicksort(array from first index to right)
        quicksort(array from left to last index)

如您所见,leftright(相当于您的ij)设置为数组的第一个和最后一个索引。

关于arrays - 我在使用快速排序算法时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45635473/

相关文章:

php - 为什么我不能在 MongoDB 文档中存储关联数组?

c++ - 如何解决 0-1 背包算法的这些变体?

sorting - 在代码(C#、Java)和数据库(SQL)之间我们应该在哪里排序或过滤?

php - 如何使用数组值作为没有循环的键?

c# - 在字符串中使用数组

java - 将 int 数组分成 3 部分,最大化 2 个较小部分的大小

从单词中组合语法正确的短语的算法

algorithm - 有没有一种简单的方法可以在 vb6 中的单打数组上使用 "mode"函数?

arrays - arr.sort(key=lambda x : (x[0], -x[1])) 是什么意思?

javascript - jQuery 排序导致 iOS Safari 卡住