我目前正在练习快速入门,直到现在它一直很好。但我可以找到一个我失败的例子(因为它似乎是一个特殊情况,我还没有读过它,这就是为什么我做错了......无法解决它)。我认为问题是因为我选择最小元素作为枢纽元素:
9 1 4 2 7 *0* (star mark means pivotelement)
现在我设置i,j
i
将通过Array(向右移动),直到找到一个大于pivototelement的元素。 j
将通过Array(向左移动)直到找到一个低于pivototelement的元素。找到后,我们切换显示i
和j
的元素。我们这样做直到i
和j
交叉(又名" j
在i
")之前。在这种情况下,我们将元素i
显示切换为并使用pivototelement索引i
...我不想现在描述整个算法,否则它将是长问题。
9 1 4 2 7 *0*
i j but now we cannot find a j that is lower than Pivotelement. What we do?
I would continue by switching i with pivotelement:
*0* 1 4 2 7 9
j i But now is the Problem that i and j are in other positions
(j is before i). I have no idea.. Please clarify and help..
答案 0 :(得分:1)
你拥有的很好,你已成功转动。
枢轴处于正确的位置,并且枢轴的两侧都满足左侧的所有元素都较少且右侧的所有元素都较大的条件。 i索引在枢轴的最后一次移动中处于不利位置,但是你并不在乎你已经破坏了它,因为你已经完成了它。现在你递归并快速排序枢轴的左右两侧 - 除了没有左侧所以在这个角落的情况下你只能向右递归。