通过泛型实现了快排
< T extends Comparable< T>>的意思是声明了一个泛型,该泛型继承了Comparable(可以通过.compareTo(x)比较,比x大就返回大于0,等于返回0,小于返回小于0)
如果是 < T extends Comparable< ? extends T>代表可以是T的子类
如果是 < T extends Comparable< ? super T> 代表可以是T的父类
import java.util.Arrays;
import java.util.Collection;
public class QuickSort {
public static <T extends Comparable<T>> void myQuickSort(T[] t, int a,int b) {
if (a < b) {
int q = Partition(t, a, b);
myQuickSort(t, a, q - 1);
myQuickSort(t, q + 1, b);
}
}
public static <T extends Comparable<T>> int Partition(T[] t, int a, int b) {
int l = a;
int r = b + 1;
T x = t[l];
while (true) {
//找到比他大的或者相等的 (他比x小就继续直到找到比他大或者相等的)
while (t[++l].compareTo(x) < 0 && l < b);
//找到比他小的或者相等的 (他比x大就继续直到找到比他小或者相等的)
while (t[--r].compareTo(x) > 0);
if (l >= r) {
break;
}
//如果下标正常 就交换
swap(t, l, r);
}
//把轴放进合适的位置,此时左边所有都比它小
t[a] = t[r];
t[r] = x;
return r;
}
//java实现swap
public static <T extends Comparable<T>> void swap(T[] data, int a, int b) {
T t = data[a];
data[a] = data[b];
data[b] = t;
}
public static void main(String[] args) {
Integer a[] = {0, 2, 2, 54, 1};
myQuickSort(a, 0, 4);
System.out.println(Arrays.toString(a));
}
}