交换排序-快速排序

1、图解,快速排序是最好的内部排序,一定要掌握。把图理解到位,下图是一趟的扫描结果,分出来的也是这样的思想去解决。快速排序采用的是分治法的思想,同样归并排序(合并排序)也是采用的是同样的思想。
在这里插入图片描述
2、快速排序采用的分治算法的思想,将大问题分解为独立且处理方式的小问题呢,最后将处理结果合并
代码如下:

package com.paixuTest;


import org.xml.sax.helpers.ParserAdapter;

import java.util.Arrays;

/**
 * 基准元素,左指针,右指针
 * 快速排序采用的思想其实是分治法,将大问题分解为独立的小问题,且每一个小问题的解决方式是一样的
 */
public class kuaiSuPaiSu {
    public static void main(String[] args) {
        int[] arr = new int[]{5,4,3,2,1};
        int _left = 0;
        int _right = arr.length-1;
        fun(arr,_left,_right);
        System.out.println(Arrays.toString(arr));


    }

    private static void fun(int[] arr, int _left, int _right) {
        int left = _left;
        int right = _right;
        int pro = 0;
        if (_left<=_right){
            pro = arr[left];
            while (left!=right){
                // 从右往左扫描  找小的
                while (right>left && arr[right]>=pro)
                    right--;
                arr[left]  = arr[right];
                // 从左往右扫描  找大的
                while (left<right && arr[left]<=pro)
                    left++;
                arr[right] = arr[left];
            }
            // 将基准元素放在合适的位置
            arr[left] = pro;
            // 对两边的元素分别执行这个方法,得抛开已经确认了的基准元素位置
            fun(arr,_left,left-1);  // 注意
            fun(arr,right+1,_right);   // 注意
        }
    }
}

注意:基准元素,从右往左扫描,从左往右扫描。最后确定基准元素的位置。没扫描完一趟就最终确认基准元素的位置,且每次基准元素的选取均为最左边的第一个元素。
3、时间复杂度:
最好:nlog2n
平均:nlog2n
最坏 nn
稳定:不稳定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值