【左神算法2】O(Nlog(N))排序 归并排序 和快速排序

目录01 master公式求递归时间复杂度02 归并排序2.1 算法步骤2.2 归并排序代码2.3 归并排序拓展: 小和问题03 快速排序3.1 算法步骤3.2荷兰国旗问题3.3经典快排01 master公式求递归时间复杂度master公式(也称主方法)是用来利用分治策略来解决问题经常使用的时间复杂度的分析方法,(补充:分治策略的递归解法还有两个常用的方法叫做代入法和递归树法,以后有机会和亲们再唠),众所周知,分治策略中使用递归来求解问题分为三步走,分别为..
摘要由CSDN通过智能技术生成

目录

01 master公式求递归时间复杂度

02 归并排序

2.1 算法步骤

2.2 归并排序代码

2.3 归并排序拓展: 小和问题

03 快速排序

3.1 算法步骤

3.2 荷兰国旗问题

3.3 经典快排

01 master公式求递归时间复杂度

master公式(也称主方法)是用来利用分治策略来解决问题经常使用的时间复杂度的分析方法,(补充:分治策略的递归解法还有两个常用的方法叫做代入法和递归树法,以后有机会和亲们再唠),众所周知,分治策略中使用递归来求解问题分为三步走,分别为分解、解决和合并,所以主方法的表现形式:

T [n] = aT[n/b] + f (n)(直接记为T [n] = aT[n/b] + O (N^d))

其中 a >= 1 and b > 1 是常量,其表示的意义是n表示问题的规模,a表示递归的次数也就是生成的子问题数,子问题规模应该一致,b表示每次递归是原来的1/b之一个规模,f(n)表示分解和合并所要花费的时间之和。

解法:
①当d < logb a时,时间复杂度为O(n^(logb a))
②当d == logb a时,时间复杂度为O((n^d)*logn)
③当d > logb a时,时间复杂度为O(n^d)

三个系数一旦确定,时间复杂度就确定了

public class RecursionTest {
    // 递归原理分析

    public static int getMax(int[] arr){
        return process(arr,0, arr.length - 1);
    }

    // 求arr数组中i 到 j 中的最大值
    public static int process(int arr[], int L, int R){
        if(L == R){
            return arr[L];
        }
        int mid = L + ((R - L) >> 1); // 求中点:如果直接用(l + r)/2 可能会超出界限
        int leftMax = process(arr, L, mid);  // 分而治之的思想
        int rightMax = process(arr, mid + 1, R);
        return Math.max(leftMax,rightMax);
    }
}

 02 归并排序

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:

  • 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法);
  • 自下而上的迭代;

2.1 算法步骤

        先让左侧部分有序, 再让右侧部分有序生成两个有序序列

  1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;

  2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置;

  3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;

  4. 重复步骤 3 直到某一指针达到序列尾;

  5. 将另一序列剩下的所有元素直接复制到合并序列尾。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值