• 06-快速排序算法


    快速排序算法

    快速排序: 是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他 n-1 个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

    快速排序代码

    public static void quickSort(int[] arr, int left, int right){
        if (left < right){
            int key = arr[left];
            int low = left;
            int high = right;

            while(low < high){
                while (low < high && arr[high] >= key){
                    high--;
                }
                arr[low] = arr[high];
                while (low < high && arr[low] <= key){
                    low++;
                }
                arr[high] = arr[low];
            }

            arr[low] = key; //pivot key的位置是low/high的位置

            for (int x : arr){
                System.out.print(x + " ");
            }
            System.out.println();

            //将基准pivot key的左右两边递归
            quickSort(arr, left, low-1);
            quickSort(arr, low+1, right);
        }
    }

    测试样例

    int[] arr = {249326715};
    quickSort(arr, 08);

    每轮输出结果为:加粗值是每轮的pivot key,得出的确定其在排序之后的最终位置和数组变动结果。

    1 2 9 3 2 6 7 4 5
    1 2 5 3 2 6 7 4 9
    1 2 4 3 2 5 7 6 9
    1 2 2 3 4 5 7 6 9
    1 2 2 3 4 5 7 6 9
    1 2 2 3 4 5 6 7 9

  • 相关阅读:
    普通线程类获取service,controller等spring容器类
    java拦截器获取请求完整参数
    分享几个免费IP地址查询API接口
    echarts热力地图
    echarts ajax请求demo
    mysql统计前24小时数据没有补0
    java获取来访者mac信息
    java获取本机mac物理地址
    mysql5.7以上基本配置
    springboot拦截异常信息发送邮件提醒
  • 原文地址:https://www.cnblogs.com/denluoyia/p/9685829.html
Copyright © 2020-2023  润新知