import java.util.Arrays;
public class QuickSort {
public static void main(String[] args){
int[] arr = {8,1,4,9,0,3,5,2,7,6}/*{2,2,2,2,2,2,2}*/;
System.out.println("排序前:" + Arrays.toString(arr));
quickSort(arr);
System.out.println("排序后:" + Arrays.toString(arr));
}
/**
* 无法正常运行,按书上写的
* @param arr
*/
public static void sort(int[] arr){
if(arr == null) return;
sort(arr, 0, arr.length - 1);
}
public static void sort(int[] arr, int left, int right){
if(left < right){
int i = left;
int j = right - 1;
int median = median(arr, left, right);
for(;;){
while (arr[++i] < median){}
while (arr[--j] > median){}
if(i < j){
swap(arr, i, j);
}else {
break;
}
}
swap(arr, i, right - 1);
sort(arr, left, i - 1);
sort(arr, i + 1, right);
}
}
public static int median(int[] arr, int left, int right){
int center = (left + right) / 2;
if(arr[left] > arr[center]) swap(arr, left, center);
if(arr[left] > arr[right]) swap(arr, left, right);
if(arr[center] > arr[right]) swap(arr, center, right);
swap(arr, center, right - 1);
return arr[right - 1];
}
public static void swap(int[] arr, int left, int right){
arr[left] = arr[left] ^ arr[right];
arr[right] = arr[left] ^ arr[right];
arr[left] = arr[left] ^ arr[right];
}
/***
* 可以正常运行
* 网址http://blog.csdn.net/qarkly112649/article/details/35794097
* @param array
*/
public static void quickSort(int[] array){
if(array != null){
quickSort(array, 0, array.length-1);
}
}
private static void quickSort(int[] array,int beg,int end){
if(beg >= end || array == null)
return;
int p = partition(array, beg, end);
quickSort(array, beg, p-1);
quickSort(array, p+1, end);
}
private static int partition(int[] array,int beg,int end){
int last = array[end];
int i = beg -1;
for (int j = beg; j <= end-1; j++) {
if(array[j] <= last){
i++;
if(i != j){
array[i] = array[i]^array[j];
array[j] = array[i]^array[j];
array[i] = array[i]^array[j];
}
}
}
if((i+1) != end){
array[i+1] = array[i+1]^array[end];
array[end] = array[i+1]^array[end];
array[i+1] = array[i+1]^array[end];
}
return i+1;
}
}
快排 Java版
最新推荐文章于 2024-05-21 19:15:40 发布