Java实现快速排序算法
快速排序算法体现了—分治思想:将大问题划分为多个相同独立的小问题,每个小问题的解决合在一起解决了大问题
实现快速排序的思想:
{2,4,1,0,3,5}是目标数组
{0,1,2,3,4,5}是结果数组
- 选取中心轴pivot(中心轴的值用于比较,坐标用于返回);
- 中心轴左边 <= 中心轴值,中心轴右边 >= 中心轴值(==因为指针也要移动,否则跳不出循环)
- 返回中心轴坐标(此时中心轴100%是结果数组的位置)
- 基于中心轴坐标(position)递归中心轴坐标中心轴左(0, position-1)右(position+1 , high )两边 (重复123步骤,直到递归结束)
快排之前:
选取pivot
确定left 和 right指针

快排结束:
left 和 right指针相遇就是中心轴pivo的新位置

快排到此结束第一轮,可以发现中心轴值最后移动到结果数组位置
递归左右两边,完成排序
最后是java快速排序代码模板:
int partition(int[] array, int low, int high) {//选定中心轴pivot//此处选取最左边low//作为中心轴if (low == array.length){return low;}int pivot = array[low];//i 和 j 相等时退出循环,交换pivot位置int i = low;int j = high;while (i < j) {//中心轴左边必须 小于 中心轴while (i < j && compare(array[j],pivot)) j--;//中心轴右边必须大于中心轴while (i < j && compare(array[i], pivot)) i++;swap(array, i, j);}//此时i==j 返回任意一个都是新的中心轴位置swap(array, low, i);return i;}public static void quickSort(int[] array, int low, int high) {//获取划分子数组的位置if (low < high){//中心轴坐标完成排序int position = partition(array, low, high);//中心轴左右继续排序quickSort(array,position+1,high);quickSort(array,low,position-1);}}

















