快速排序
快速排序由冒泡排序演化而来
快速排序在每一轮挑选一个基准元素 让比他大的元素移动到数列的另一边 比较小的元素移动到数列的一边
这里是使用了策略模式 把接口忽略就可以了
public class QuickSort<T extends Comparable> implements Strategy<T> {
@Override
public void operation(T[] array) {
quickSort(array, 0, array.length - 1);
for (T t:array){
System.out.println(t);
}
}
private static <T extends Comparable> void quickSort(T[] array, int low, int high) {
//递归停止的条件 很重要 递归一定要有一个停止条件!!!!!!
if (low < high) {
int index = getIndex(array, low, high);
//分支递归思想 左右分别进行排序
quickSort(array, low, index - 1);
quickSort(array, index + 1, high);
}
}
private static <T extends Comparable> int getIndex(T[] array, int low, int high) {
// 保存基准值 用来比较
T temp = array[low];
//当low == high的时候就是基准值所在的位置
//本质思想就是把比基准值大的放右边 比基准值小的放左边 找到基准值所在位置 递归的思想左右排序
while (low < high) {
//从后面开始 如果比基准值大 没问题 high--
while (low < high && array[high].compareTo(temp) >= 0) {
high--;
}
//小的话 放左边 当前的low的值变为high的值
array[low] = array[high];
//比基准值小 没问题 放左边 ++
while (low < high && array[low].compareTo(temp) <= 0) {
low++;
}
//一直到找到比基准值大的 high指向的值变为当前的low
array[high] = array[low];
}
//基准值所在位置 返回索引
array[low] = temp;
return low;
}
}