Java 分区循环理解
为什么分区方法的循环体从不抛出ArrayIndexOutOfBounds异常Java 分区循环理解,java,quicksort,Java,Quicksort,为什么分区方法的循环体从不抛出ArrayIndexOutOfBounds异常 public static int partition( int[] a, low, high ) { int k = low, m = low; /* loop invariant: * low <= k <= m <= high and * all elements in a[low..k-1] are RED (i.e., < piv
public static int partition( int[] a, low, high ) {
int k = low, m = low;
/* loop invariant:
* low <= k <= m <= high and
* all elements in a[low..k-1] are RED (i.e., < pivot) and
* all elements in a[k..m-1] are BLUE (i.e., >= pivot)
*/
while (m != high) {
if (a[m] >= pivot) // a[m] is BLUE
{ }
else { // a[m] is RED
swap(a,k,m);
k = k+1;
}
m = m+1;
}
return k;
}
公共静态int分区(int[]a,低,高){
int k=低,m=低;
/*循环不变量:
*low//m您给出的代码甚至不会编译,如果您提供不适当的low
和high
值,它肯定会引发异常。这是代码的一部分,我只对该方法的循环体感兴趣。请阅读-基本上,您没有给我们足够的上下文。我怀疑您想给我们根据low
和high
之间的关系,以及high
和a.length
之间的关系,我们无法回答这个问题(一方面,因为如果您提供了不适当的值,它将抛出ArrayIndexOutOfBoundsException)好的,谢谢。我会重新发布问题。你不需要发布新问题,只需编辑这个问题。
// m <= high (loop invariant)
while (m != high) {
// m < high, hence correct index
a[m] ...
m = m + 1;
// m <= high (loop invariant)
}
// k <= m
if (...) {
swap(a, k, m);
// m <= old m // if call-by-reference
k = k + 1;
// k - 1 <= m if call-by-value
}
m = m + 1;
// k <= m again; if call-by-value