快速排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面图是一开始的23为基准一直开始比较的。当low=high时就是确定是它最终的位置
(图是借来的)

public class QuickSortTwo {
    /*
     * 归并排序是把数组拆到最小单元,然后从最小单元合并。变为有序数组
     * 快速排序是把数组从整体开始排序,到最小单元有序,最终达到有序数组
     *
     *  每轮比较完最终都会确定临时变量的索引位置。
     * 1.定义临时变量放置一个基准元素,头索引为L,尾索引为R。
     *
     * 定义基准元素是索引是从 L 开始的
     *
     * 2.从 R 向前和临时变量比较,如果遇到大于临时变量 R 就减1向前移动再进行比较。
     *
     * 3.当遇到小于临时变量,把该 R 对应的元素给到 L 对应的索引位置上
     *
     * 4.然后改由从 L 开始 向前和 临时 变量比较 ,如果遇到小于临时变量的 L 就 加1 向前移动再进行比较
     *
     * 5.当遇到大于临时变量,把该 L 对应的元素给到 R 对应的索引位置上
     *
     * 6.再执行上面的第二步 直到 L < R
     *
     * 7.确定临时变的即基准元素的索引位置
     *
     * 8.并返回下轮迭代的索引位置
     *
     * 9.quickSort分成左右执行到最小单元就退出递归,排序完成
     * */

    public static void main(String[] args) {
        int[] arr = { 49, 38, 65, 97};
        quickSort(arr, 0, arr.length - 1);
        System.out.println("===============排序后:"+ Arrays.toString(arr));
    }

    public static  void quickSort(int [] arr,int L ,int R){

           if (L< R){
               //1.先整体
               int index = sort(arr, L, R);
               //2.左边部分
               quickSort(arr, L, index-1);
               //3.右边部分
               quickSort(arr,index+1,R);
           }
    }

    public  static  int sort(int [] arr,int L ,int R){
         int temp = arr[L];
          while (L<R){
                //如果为L<=R,等号会使LR重合时,不能和临时变量比较
                while (L<R && temp<arr[R]){
                     R --;
                }
                arr[L] = arr[R];

                while (L<R && temp>arr[L]){
                    L ++;
                }
                arr[R] = arr[L];
          }
          arr[L] = temp;
          return  L ;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值