Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 快速排序分区算法。它是如何工作的_Algorithm_Data Structures_Quicksort_Partitioning - Fatal编程技术网

Algorithm 快速排序分区算法。它是如何工作的

Algorithm 快速排序分区算法。它是如何工作的,algorithm,data-structures,quicksort,partitioning,Algorithm,Data Structures,Quicksort,Partitioning,这是一个快速排序的分区算法 设a=x[lb](lb指下限)为寻找其最终位置的元素。 向上和向下的两个引用分别初始化为子数组的上界和下界。 在执行过程中的任何一点上,位于上方位置的每个元素都比a更尖锐 上下两个参照按以下方式相互移动 步骤1:重复将指针向下增加一个位置,直到x[向下]>=a 步骤2:反复将指针向上减少一个位置,直到x[up]向下,则将x[向下]与x[向上]交换。 重复该过程,直到步骤3中的条件失败(即向上==a,向下指针不必移动。 减少4倍后 向下点为0,向上点为4 然后将x[向下

这是一个快速排序的分区算法

设a=x[lb](lb指下限)为寻找其最终位置的元素。 向上和向下的两个引用分别初始化为子数组的上界和下界。 在执行过程中的任何一点上,位于上方位置的每个元素都比a更尖锐

上下两个参照按以下方式相互移动
步骤1:重复将指针向下增加一个位置,直到x[向下]>=a

步骤2:反复将指针向上减少一个位置,直到x[up] 步骤3:如果向上>向下,则将x[向下]与x[向上]交换。 重复该过程,直到步骤3中的条件失败(即向上=<向下),此时x[up]与x[lb](等于a)互换,x[lb]的最终位置被寻找,j(即最终位置)被设置为设置

使用此算法,我必须对数组进行分区

25,57,48,37,12,92,86,33  
选择pivot作为数组中的第一个元素。 因此a=25

最初向下=0,向上=7。
由于满足条件x[down]>=a,向下指针不必移动。
减少4倍后
向下点为0,向上点为4

然后将x[向下]与x[向上]互换,我得到

12,57,48,37,25,92,86,33
在向下增加一次,向上减少四次之后,我得出向上=0,向下=1。
然后我必须将x[up]与x[lb]交换。
然后我有12,57,48,37,25,92,86,33,j=up=0

这是正确的吗。 ?
当应用到快速排序算法时,我必须进行快速排序(x,1,7)

也就是说,我必须对数组进行分区
57,48,37,25,92,86,33

选择第一个元素作为轴a=57

然后向下=0,向上=6

将x[向下]与x[向上]互换 我得到了
33,48,37,25,92,86,57

反复增加向下指针4次,反复减少向上指针3次我有
33,48,37,25,92,86,57

然后向下=4,向上=3。
将x[up]与x[lb]交换
我有
25,48,37,33,92,86,57
j=up=3

但是很明显,这在57附近没有正确划分


我看不出我犯了什么错误。因此,如果有人能帮我找出这个错误,那将非常有帮助

在将x[down]与x[up]互换后,你也必须不断地更新。 步骤3应修改为:
步骤3:如果向上>向下,则将x[down]与x[up]以及向下++和向上--交换。重复该过程,直到步骤3中的条件失败(即向上=<向下),此时x[up]与x[lb](等于a)互换,x[lb]的最终位置被搜索,j(即最终位置)被设置为向上。

反复将指针向下增加一个位置,直到x[down]>=a
-应该是
-然后你要指向57,它大于枢轴,应该与数组右侧较小的元素交换。我这里指的当然是左侧索引。@500 InternalServerError:那么错误在算法右侧?是的,基本上是这样的:只要左索引指向的值小于或等于轴,就增加左索引。然后,只要右索引的值大于或等于轴值,就减小右索引。如果索引未满足要求,则交换这两个值,增加/减少索引,然后重复。@500 InternalServerError相等是否同时出现在less或ewual和greater或equal中?如果x[down]>a和x[up],此算法工作正常