java增量/减量运算符内部调用

java增量/减量运算符内部调用,java,increment,quicksort,Java,Increment,Quicksort,我们正在学习快速排序。这本书在我问题的末尾提供了代码 我很好奇findPivot方法末尾的这个调用: swap(array, left++, right--); 为什么有“+”和“-”在里面?它不增加/减少任何变量(交换之前或之后),也不访问(例如)数组[left+1] 那么是什么原因呢 编辑 因此,在发布问题之前,我编写了以下测试代码: public static void main(String[] args) { int a = 0; int b = 2; in

我们正在学习快速排序。这本书在我问题的末尾提供了代码

我很好奇findPivot方法末尾的这个调用:

swap(array, left++, right--);
为什么有“+”和“-”在里面?它不增加/减少任何变量(交换之前或之后),也不访问(例如)数组[left+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]);
    }
publicstaticvoidmain(字符串[]args){
int a=0;
int b=2;
int[]数组={1,10,20,30};
交换(数组,a++,b--);
}
公共静态无效交换(int[]数组,int a,int b)
{
对于(int i=0;i<10;i++)
{
整数温度=数组[a];
数组[a]=数组[b];
数组[b]=温度;
System.out.println(“a=“+a+”\nb=“+b+”\narray a:“+array[a]+”\narray b:“+array[b]);
}
结果如下:

a=0 b=2 阵列a:20 阵列b:1 a=0 b=2 数组a:1 阵列b:20 a=0 b=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;
}
私有静态无效交换(整数[]数组,int i,int j)
{
整数温度=数组[i];
数组[i]=数组[j];
数组[j]=温度;
}
公共静态void快速排序(整数[]数组,左整数,右整数)
{
if(左<右)
{
int pivot=findPivot(数组,左,右);
快速排序(数组,左,轴-1);
快速排序(数组,透视+1,右);
}
}//快速分类
公共静态int findPivot(整数[]数组,int左,int右)
{
int first=左++;
while(左是(
++
)和(
--
)操作。这些操作将更改while循环中下一次迭代的值

你基本上有:

while (left <= right)
{
    // ...
    if (left < right)
    {
        swap(array, left, right);
        left++;
        right--;
    }
}

有关预增量运算符的详细信息,可以查看。

交换(数组,左++,右-);
位于
while
循环中,因此更新的值将在下一次循环迭代中使用。

它们是后增量(++)和后减量(--)操作,因此它们将在while循环的下一次迭代中更改值

在这一行输入代码

   swap(array, left++, right--);//left++ , right-- are post increment (++) and post decrement (--) operation
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 '--' 

这当然是不寻常的代码。这是从哪里来的?似乎没有必要浓缩。有一种更清晰、更容易混淆的方法来做同样的事情,而不会降低效率。你的意思是在通话后在单独的一行中显示增量/减量吗?如果是这样的话,我非常同意!今天我曾经非常愿意这是我第一次在与其他人相同的时间内回答问题……我不确定谁更快:/我真的不知道:)我会给你+1来简化代码,不过:-)明白了,谢谢。在我的测试中,它在方法中没有递增/递减,所以我在主测试中检查了它,它们都是1。谢谢!如果我有这个能力,我会提高投票率!@MayNotBe:Good!:-)即使你不能提高投票率,你也可以(而且应该)提高投票率接受其中一个答案——但我建议你接受Martijn Courtaux的答案,因为他的答案更彻底。
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 '--'