【发布时间】:2022-01-05 11:11:05
【问题描述】:
我在做排序数组问题,发现一个快速排序解决方案非常快,唯一的区别是函数 1Partition 中的两行代码。想知道为什么1Partition下面两行代码可以大大提升性能:
int mi = low+(high-low)/2;
swap(arr,high,mi);
这是完整的源代码:
class Solution {
public void swap(int[] arr, int i, int j){
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
public void qSort(int[] arr, int low, int high){
if(low<high){
int pi = lPartition(arr,low,high);
qSort(arr,low,pi-1);
qSort(arr,pi+1,high);
}
}
public Integer lPartition(int[] arr, int low, int high){
int mi = low+(high-low)/2;
swap(arr,high,mi);
int pi = high;
int i = low-1;
for(int j=low;j<high;j++){
if(arr[j]<arr[pi]){
i++;
swap(arr,i,j);
}
}
swap(arr,pi,i+1);
return (i+1);
}
public int[] sortArray(int[] arr) {
qSort(arr,0,arr.length-1);
return arr;
}
}
【问题讨论】:
-
这两行与其他什么相反?
标签: java algorithm performance sorting quicksort