public class QuickSort {
private QuickSort(){}
public static <E extends Comparable<E>> void sort(E[] arr){
sort(arr,0,arr.length-1);
}
private static <E extends Comparable<E>> void sort(E[] arr, int l, int r) {
if(l >= r){
return;
}
int p = partition(arr,l,r);
System.out.println("a: " + p);
sort(arr,l,p - 1);
sort(arr,p + 1,r);
}
private static <E extends Comparable<E>> int partition(E[] arr, int l, int r) {
// 对于有序数组,随机找一个中间量
// int p = l + (new Random()).nextInt(r - l + 1);
// swap(arr,l,p);
int j = l;
for (int i = l + 1; i <= r; i++) {
if(arr[i].compareTo(arr[l]) < 0){
j++;
swap(arr,i,j);
}
}
swap(arr,l,j);
return j;
}
private static <E extends Comparable<E>> void swap(E[] arr, int i, int j) {
E temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
Integer[] arr = {30,20,10,33,66,99};
QuickSort.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
算法与数据结构——快速排序(1)
于 2022-09-20 11:17:27 首次发布