我们正在学习有关QuickSort的知识。这本书在我的问题结束时提供了代码。
我对FindPivot方法末尾的电话感到好奇:
swap(array, left++, right--);
为什么在那里有" "one_answers" - "?它不会增加/减少一个变量(交换之前或之后),也无法访问(例如)数组[左 1]。
那么什么给了
编辑
所以在我发布问题之前,我写了以下测试代码:
public static void main(String[] args) {
int a = 0;
int b = 2;
int[] array = {1,10,20,30};
swap(array, a++,b--);
}
public static void swap(int[]array,int a, int b)
{
for(int i = 0; i < 10; i++)
{
Integer temp = array[a];
array[a] = array[b];
array[b] = temp;
System.out.println("a = " + a + "nb = " + b + "narray a: " + array[a] + "narray b: " + array[b]);
}
结果如下:
a = 0b = 2阵列A:20阵列B:1a = 0b = 2阵列A:1阵列B:20a = 0b = 2阵列A:20阵列B:1
在方法中使用时,该变量根本没有插入后。这就是为什么我问这个问题。
谢谢。这是代码:
private static void swap(Integer[] array, int i, int j)
{
Integer temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void quickSort(Integer[] array, int left, int right)
{
if(left < right)
{
int pivot = findPivot(array, left, right);
quickSort(array, left, pivot - 1);
quickSort(array, pivot + 1, right);
}
}//quickSort
public static int findPivot(Integer[] array, int left, int right)
{
int first = left++;
while (left <= right)
{
while (left <= right && array[first].compareTo(array[left]) > 0)
{
left++;
}
while (left <= right && array[first].compareTo(array[right]) < 0)
{
right--;
}
if (left < right)
swap(array, left++, right--);
}
swap(array, first, right);
return right;
}
它是提交后(§15.14.2)( ++
)和启动后(§15.14.3)( --
)操作。这些将改变您的while循环中的下一次迭代的值。
您基本上有:
while (left <= right)
{
// ...
if (left < right)
{
swap(array, left, right);
left++;
right--;
}
}
您可以看到,"帖子"意味着该值对该特定语句不受影响。评估后增量操作后,它将增加变量,但是传递给该方法的值仍然是旧的。对于高级读者,您可以像这样编写收入后操作员(伪代码):
public int operator this++()
{
int temp = this;
++this; // regular pre-increment (JLS §15.15.1)
return temp;
}
有关通知前操作员的阅读,您可以检查JLS§15.15.1。
swap(array, left++, right--);
在while
循环内部,因此更新值将在下一个循环迭代中使用。
java增量(++
)和减少(--
)假设i++;
这意味着i+1
,i--
表示i-1
在编程
int i = 1;
System.out.println("i : "+(i++)); // this means first print then add `1` into i;
//and
System.out.println("i : "+(++i)); // this means first add one and then print it;
// same for '--'
它们是帖子增量( )和后降低( - )操作,因此它们将在您的下一个迭代中更改您的下一个迭代中的值
在此行中的代码中
swap(array, left++, right--);//left++ , right-- are post increment (++) and post decrement (--) operation