C#while循环不退出(快速排序)

C#while循环不退出(快速排序),c#,loops,while-loop,quicksort,C#,Loops,While Loop,Quicksort,出于某种原因,我的while循环(我打赌是递归还是内部while循环仍在进行。我没有记住快速排序算法,但我敢打赌,如果你破坏了调试器,你会发现自己处于两个内部while循环中的一个。编写快速排序是一个非常好的练习,它不像看起来那么容易获得所有内容对!;) 这是你的代码的一个问题。考虑如果 J 颠簸会发生什么,而 > 不。你把这个枢轴(在 J )与在 I/和增量>代码> i>代码>之间交换。这不能正确地继续(如果你了解Quicksort,你应该明白为什么)。 选择轴后,我喜欢用一个边界(左或右)交

出于某种原因,我的while循环(我打赌是递归还是内部while循环仍在进行。我没有记住快速排序算法,但我敢打赌,如果你破坏了调试器,你会发现自己处于两个内部while循环中的一个。

编写快速排序是一个非常好的练习,它不像看起来那么容易获得所有内容对!;)

这是你的代码的一个问题。考虑如果<代码> J <代码>颠簸会发生什么,而<代码> > 不。你把这个枢轴(在<代码> J <代码>)与在<代码> I/<代码>和增量>代码> i>代码>之间交换。这不能正确地继续(如果你了解Quicksort,你应该明白为什么)。


选择轴后,我喜欢用一个边界(左或右)交换它,交换值直到
I
j
相遇,然后将轴放回这个位置。当然,还有其他方法。

这不是一个无限循环

while (a[i] < x)
    {
        i++;
    }
while(a[i]

如果x是列表中最大的数字,只要数组超出范围,它就会引发“i”,程序就会抛出OutofRange异常。

如果i==j
a[i]==x
会发生什么情况?不增加,不减少,只需交换并继续


考虑更改
while(我不相信
while
被破坏。继续调试。可能是递归?它永远不会到达递归。这发生在第一次通过时。项是用户定义的类吗?如果是,你能为它提供代码吗?除了
a[pivotValue]
保证会断开这些内部循环,因为它不大于或小于自身(当
i
j
等于
pivotValue
时),它会在(a[i]i
开始时等于
left
left
while (a[i] < x)
    {
        i++;
    }