0
点赞
收藏
分享

微信扫一扫

加速理解快速排序

古月无语 2022-04-20 阅读 147
算法java

快速排序

  • 快排可以理解为冒泡排序的改进,也是不断的比较和移动,只不过移动的间隔变大了

  • 时间复杂度为O(N * logn),可以通过递归排序树来理解
    在这里插入图片描述

  • 主要思想:

(1)随机选取一个基准,通过排序使该基准左边的数都小于等于基准数,右边的数都大于等于这个基准数

(2)在数组的两头设置两个哨兵,保证左哨兵的索引小于右哨兵,左哨兵向右移动遇到比基准值小的停下,右哨兵向左移动,遇到比基准值小的停下,交换两哨兵索引处的值。
在这里插入图片描述
(3)当第一趟排序完成之后,对基准值两侧的子序列继续进行排序。

  • 代码部分:
/*包含了主方法对快速排序的测试*/
public class QuickSort {

    public static void quick(int [] arr, int low, int high){
        int i = low;
        int j = high;
        //当左右哨兵相遇后就不再移动
        if(i >= j){
            return;
        }
        //此处取数组的第一个数为基准
        int target = low;
        while(i < j){
            while(arr[j] > arr[target]){
                j--;
            }
            while(arr[i] < arr[target]){
                i++;
            }
            //交换两个哨兵指向的基准值
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }

        //完成相遇点与基准值的交换
        int temp = arr[target];
        arr[target] = arr[i];
        arr[i] = temp;

        //将子序列传入,递归调用
        quick(arr,low,target - 1);
        quick(arr,target + 1, high);

    }

    public static void main(String[] args) {
        int [] arr = {6, 8, 9, 7, 4, 3};

        //调用排序算法
        quick(arr,0,arr.length - 1);

        //打印排序后的数组
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }
}

举报

相关推荐

0 条评论