数据结构和算法——快速排序递归实现(java)

这篇博客详细介绍了快速排序算法的递归实现过程,包括设置左右指针和基准值,通过比较交换元素,以及递归处理枢轴值两侧的子数组。文章指出,快速排序在最坏情况下的时间复杂度为n^2。
摘要由CSDN通过智能技术生成

算法思路

大概思路:把待排序数组与枢轴值较,大的放在枢轴值右边,小的放在其左边
	    再分别按上述步骤递归左边部分和右边部分,当左指针

快速排序算法的时间复杂度取决于递归的深度,最坏的情况是n^2

1.创建两个指针,左指针和右指针和一个基准值,当左指针>右指针,退出递归;左指针指向最左边的值,右指针指向最右边的值,基准值为第一个数

		//递归结束条件
        if (low>high){
   
            return;
        }
        int l,r,pivot;//左右哨兵和枢轴值
        l = low;
        r = high;
        //枢轴值,每次指定为该组的第一个数
        pivot = arr[low];
        //循环,知道两个哨兵相遇
        //表示pivot到了正确的位置

2.左指针向右遍历,直到找到大于枢轴值的数,右指针向左遍历,直到找到小于枢轴值的数,然后交换两个值

//循环,直到两个哨兵相遇
        //表示pivot到了正确的位置
        while (l < r){
   
            //先看右边,依次往左递减
            //先从右往左找一个小于 基准位的数
            //当右边的哨兵位置所在的数>基准位的数 时
            //继续从右往左找(同时 j 索引-1)
            //找到后会跳出 while循环
            while (arr[r] >= pivot 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值