1、三点中值法
三点中值法就是双向扫描的优化,降低算法复杂度。主要区别是把begin,end,mid进行比较,把中间值作为目标值进行比较排序。
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = { 9, 8, 7, 6, 5, 0, 4, 8, 3, 2, 8, 7, 10 };
quicksort(arr, 0, arr.length - 1);
for (int num : arr) {
System.out.print(num + " ");
}
}
private static int partition2(int arr[],int begin,int end) {
//优化,在begin,mid,end选一个中间值作为目标值
int mid=begin+((end-begin)>>1);//中间下标,右移1相当于除以二
int midValue=-1;//中间值下标
if(arr[begin]>=arr[mid]&&arr[begin]<=arr[end]) {
midValue=begin;
}else if (arr[end]>=arr[begin]&&arr[end]<=arr[mid]) {
midValue=end;
}else {
midValue=mid;
}
swap(arr, begin, midValue);
int left=begin+1;
int right=end;
int pivot=arr[begin];
while(left<=right) {
while(left<=right&&arr[left]<=arr[begin]) {
left++;
}
while(left<=right&&arr[right]>arr[begin]) {
right--;
}
if(left<right)
swap(arr, left, right);
}
swap(arr, begin, right);
return right;
}
private static void swap(int arr[],int i,int j) {
int temp;
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
2、绝对中值法
还不是太清楚。。。。等更