合久必分,分久必合----归并排序

归并排序是一种采用分治思想的排序算法,通过分解、治理和合并三个步骤,实现大问题到小问题的解决。在时间复杂度上达到O(nlogn),而空间复杂度为O(logn)。本文还提供了代码实现。
摘要由CSDN通过智能技术生成

归并排序

归并排序就是采用分治的思想,将一个大问题才分成许多小问题,再将小问题一个一个解决点,最终解决了大问题。他是一种平衡的、二分的分治策略。
1、先分解:将待排序的元素一分为二。
2、治理:将两个子序列进行排序。
3、合并:将排好的有序子序列合并,得到最终的有序序列。

图解

在这里插入图片描述

复杂度分析

时间复杂度:分解仅仅需要确定中间mid的值,因此是常数时间O(1);
解决子问题,递归调用两个规模的子序列,所需时间是2T(n/2)
合并算法可以在O(n)时间内完成。
所以最终算法时间复杂度是O(nlogn)。
空间复杂度:因为是递归调用,所以递归树的深度决定所占的栈空间,假设递归树的深度是x,那所占的函数栈空间就是n=2^x,所以n=O(logn)。

代码实现

package sort;

/**
 * 归并排序,时间复杂度是nlogn,空间复杂度logn(递归)
 */
public class MergeSort {
   
    public void merge(int A[],int low,int mid,int high){
   
        int [] array = new int[high-low+1];
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值