zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    thinkphp中<eq>标签的使用
    Thinkphp中的eq比较标签
    select取数据库值设为默认值,TP框架模板中ifelse
    fastadmin 前端根据status自定义显示不同的内容
    CMS自定义表单无法切换“是否需要登录”开关
    js获取域名
    fastadmin 页面添加编辑日期时间
    bootstrap-table给单元格添加链接
    python相关资料
    区块链共识机制 —— PoW共识的Python实现
  • 原文地址:https://www.cnblogs.com/denluoyia/p/9685829.html
Copyright © 2011-2022 走看看