在下面实现的快速排序中,我将数组的第一个元素作为枢轴。当我使用temp变量交换元素时,sort算法工作得非常好,但是当我就地交换它们时,它不起作用(将0s作为元素添加到排序数组中)。 Kindy解释了这段代码中的问题。
public static void quickSort(int[] arr,int start,int end)
{
if(start < end)
{
int partition = partition(arr,start,end);
quickSort(arr,partition-1);
quickSort(arr,partition+1,end);
}
}
public static Integer partition(int[] arr,int end)
{
int pivot = start,i = start,j = end;
while(i<j)
{
while(i<end && arr[i]<=arr[pivot])
{
i++;
}
while(arr[j]>arr[pivot])
{
j--;
}
if(i<j)
{
arr[i] = arr[i] + arr[j];
arr[j] = arr[i] - arr[j];
arr[i] = arr[i] - arr[j]; //It doesn't work
/*int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
*/ //It works
}
}
arr[pivot] = arr[pivot] + arr[j];
arr[j] = arr[pivot] - arr[j];
arr[pivot] = arr[pivot] - arr[j]; //It doesn't work
/*int temp = arr[pivot];
arr[pivot] = arr[j];
arr[j] = temp;
*/ //It works
return j;
}