从冒泡排序演化而来。
快速排序在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列的一边,比它小的元素移动到数列的另一边,从而把数列拆解成两个部分。
这个思路就叫做分治法。
选定基准元素以后,我们要做的就是把其他元素中小于基准原色的都交换到基准元素的一边,大于基准元素的都交换到基准元素的另一边。
有两种实现方法
1.双边循环法
2.单边循环法
双边循环法代码示例:
/**
* @Author: subd
* @Date: 2019/8/20 8:37
*/
public class QuickSort {
public static void quickSort(int[] arr, int startIndex, int endIndex) {
//递归结束条件:startIndex大于或等于endIndex时
if (startIndex >= endIndex) {
return;
}
//得到基准元素位置
int pivotIndex = partition(arr, startIndex, endIndex);
//得到进准元素,分成两笔分进行递归排序。
quickSort(arr, startIndex, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, endIndex);
}
/**
* 双边循环法
* @param arr
* @param startIndex
* @param endIndex
* @return
*/
private static