Java 在快速排序中,为什么要在数组外开始递减
所以j=array[4]那么我们说当。。。数组[4-]哪个会变成j=数组[3],对吗 这不是同一件事吗:右+1和-j,右和j-行:Java 在快速排序中,为什么要在数组外开始递减,java,quicksort,Java,Quicksort,所以j=array[4]那么我们说当。。。数组[4-]哪个会变成j=数组[3],对吗 这不是同一件事吗:右+1和-j,右和j-行: {4,3,6,1,9} int j = right 期望j的两个值相同。如果你把它改成 while (a[--j] > pivot) { if (j == left) { break; } } 第一个引用的j,a[j-]将比下一个j高一个,j==左 如果要进行更改,您必须将其更改为: while (a[j--] >
{4,3,6,1,9}
int j = right
期望j的两个值相同。如果你把它改成
while (a[--j] > pivot) {
if (j == left) {
break;
}
}
第一个引用的j,a[j-]将比下一个j高一个,j==左
如果要进行更改,您必须将其更改为:
while (a[j--] > pivot) {
if (j == left) {
break;
}
}
我个人的观点是,以前的代码比较干净,因为在一个范围之外启动一个代码是常见的,也是可以理解的。加一个回来是“微妙的”,会让每个人都怀疑它是否正确
做出更改的最清晰方式可能是:
while (a[j--] > pivot) {
if (j+1 == left) { //adding one back in
break;
}
}
<>我会认为这很干净,而且比原来的更好,因为你从int j=右边开始。 线:
{4,3,6,1,9}
int j = right
期望j的两个值相同。如果你把它改成
while (a[--j] > pivot) {
if (j == left) {
break;
}
}
第一个引用的j,a[j-]将比下一个j高一个,j==左
如果要进行更改,您必须将其更改为:
while (a[j--] > pivot) {
if (j == left) {
break;
}
}
我个人的观点是,以前的代码比较干净,因为在一个范围之外启动一个代码是常见的,也是可以理解的。加一个回来是“微妙的”,会让每个人都怀疑它是否正确
做出更改的最清晰方式可能是:
while (a[j--] > pivot) {
if (j+1 == left) { //adding one back in
break;
}
}
我认为这是非常干净的,比原来的更好,因为你从int j=右边开始。
< p>在循环中的其他地方与j的值进行比较。如果计数器以j=right开始,在用-j或j-递减j后,这些点的j值将与以j=right+1开始时的j值不同,j值将与循环中其他位置的j值进行比较。如果计数器以j=right开始,在用-j或j递减j之后,这些点的j值将与以j=right+1开始时的j值不同。谢谢,我现在明白我们为什么从外部开始了。我在没有做右+1的情况下成功了,但我要坚持原创性。汉克斯,我现在明白我们为什么要从外面开始了。我没有做一个正确的+1,但我会坚持原来的