【算法】排序算法之快速排序详解(快排Java版图解分析+详细代码)

基本思维

快排是冒泡排序的一种优化。

【冒泡排序 O(n^2)】
把整体待处理数组当成一组处理对象,从前往后,两两对比交换,每一轮都把最大的排到最后,直到排完所有。

【快排 O(nlogn)】
把处理对象分成左右两组,每次找一个对比的对象,从前往后数和从后往前数,每轮都交换到两个比较小和比较大的,不断分成左右两组,不断交换,直到最小的分组都是有序的,整体就是有序的

快排的思维模型类似,每次进步一点点,不断分成小步来实现;而冒泡则是每次都做到最好

思路分析

假定 目前有数组 [2,3,4,6,3]

  1. 找对比基准值:原则找任何都可以,找最前面、最后面、最中间都可以,这里有算法讨论 ,感兴趣的可以去研究。假定 我们就找数组的最中间值。
  2. 两个左右移动的指针:最左边、最右边
  3. 指针移动规则:左指针向右移动,直到找到**>=基准值** 的第一个数;右指针向左移动,直到找到**<=基准值**的数,相互交换
  4. 左递归:由此分成 左边的数组,依次按照上面的规则左递归,直到顺序
  5. 右递归:由此分成 右边的数组,依次按照上面的规则右递归,直到顺序

【算法】排序算法之快速排序详解(快排Java版图解分析+详细代码)_第1张图片

代码实现


    /**
     * TODO 【题目】快速排序
     *
     * @param arr   数组
     * @param left  左指针
     * @param right 右指针
     */
    public static void quickSort(int

你可能感兴趣的:(数据结构与算法,算法,快速排序,数据结构,java)