八大排序算法 |
您所在的位置:网站首页 › 递归插入排序流程图 › 八大排序算法 |
八大排序算法——归并排序(动图演示 思路分析 实例代码java 复杂度分析)
一、动图演示
二、思路分析 归并排序就是递归得将原始数组递归对半分隔,直到不能再分(只剩下一个元素)后,开始从最小的数组向上归并排序 1. 向上归并排序的时候,需要一个暂存数组用来排序, 2. 将待合并的两个数组,从第一位开始比较,小的放到暂存数组,指针向后移, 3. 直到一个数组空,这时,不用判断哪个数组空了,直接将两个数组剩下的元素追加到暂存数组里, 4. 再将暂存数组排序后的元素放到原数组里,两个数组合成一个,这一趟结束。 根据思路分析,每一趟的执行流程如下图所示:
三、负杂度分析 1. 时间复杂度:递归算法的时间复杂度公式:T[n] = aT[n/b] + f(n) 无论原始数组是否是有序的,都要递归分隔并向上归并排序,所以时间复杂度始终是O(nlog2n) 2. 空间复杂度: 每次两个数组进行归并排序的时候,都会利用一个长度为n的数组作为辅助数组用于保存合并序列,所以空间复杂度为O(n)
四、Java 代码如下 import java.util.Arrays; public class Main { public static void main(String[] args) { int[] arr = new int[]{3,6,4,7,5,2}; merge(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); } //归并 public static void merge(int[] arr,int low,int high){ int center = (high+low)/2; if(low |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |