归并算法: 要将一个数组排序,可以先(递归地)将它分成两半分别排序,然后将结果归并起来。

时间复杂度为 O(NlogN) ,空间复杂度为 O(n)

 1 public class Merge {
 2
 3     private static int[] copy;
 4
 5     public static void sort(int[] array){
 6         copy = new int[array.length];
 7         sort(array, 0, array.length -1);
 8     }
 9
10     private static void sort(int[] array, int start, int end) {
11         //将数组排序
12         if(end <= start) return;
13         int mid = start + (end - start) /2;
14         sort(array, start, mid); //将左边数组排序
15         sort(array, mid + 1, end);//将右边的数组排序
16         merge(array, start, mid, end);//归并方法
17     }
18
19     /**
20      * 排序
21      * @param array 需要排序的数组
22      * @param start 数组的起始位置
23      * @param mid 数组的中间位置
24      * @param end 数组的结束位置
25      */
26     private static void merge(int[] array, int start, int mid, int end) {
27         int i = start, j = mid+1;
28         for(int k = start; k <= end; k++){ //复制数组
29             copy[k] = array[k];
30         }
31
32         for(int k = start; k <= end; k++){
33             if(i > mid) array[k] = copy[j++]; //当只剩下右边数组
34             else if (j > end) array[k] = copy[i++]; //当只剩下左边数组
35             else if (copy[i] <= copy[j]) array[k] = copy[i++];
36             else array[k] = copy[j++];
37         }
38     }
39 }

测试代码:

 1 public class MergeTest {
 2
 3     public static void main(String args[]){
 4         int[] array = new int[] {9,5,3,4,89,14,24,56,3,78,45};
 5         Merge.sort(array);
 6         for(int i : array){
 7             System.out.print(i + " ");
 8         }
 9     }
10 }

 

 

转载于:https://www.cnblogs.com/huangyichun/p/6086862.html

排序算法之------归并排序相关推荐

  1. 排序算法:归并排序、快速排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.归并排序: 1.工作原理: 归 ...

  2. 排序算法之--归并排序(好玩的一个算法o。o)快速入门

    排序算法之--归并排序(好玩的一个算法o.o) 下面是归并操作的基本思路(注意:是归并操作哦,不是归并排序哦) 归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存 ...

  3. NOI提高级:排序算法之归并排序、快速排序

    图解排序算法(四)之归并排序 图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园 小学生图解排序算法:⑥归并排序 小学生图解排序算法:⑥归并排序_纯文笔记-CSDN博客_图解 ...

  4. 数据结构与算法:十大排序算法之归并排序

    数据结构与算法:十大排序算法之归并排序 package TopTenSortingAlgorithms;/*** 归并排序:Java** @author skywang* @date 2014/03/ ...

  5. [Alg]排序算法之归并排序

    [Alg]排序算法之归并排序 作者:屎壳郎 miaosg01@163.com 日期:Aug 2021 版次:初版 简介: 归并排序是一类在任何情况下都能保证Nlg⁡(N)N\lg(N)Nlg(N)的排 ...

  6. 【排序算法】归并排序(C语言)

    [排序算法]-- 归并排序(C语言) 目录 一.归并排序的原理 二.两个有序数组排序和合并 1. 原地排序 2. 创建临时空间 二.递归实现 三.非递归实现 1. 实现思路 2. 数组边界问题 3. ...

  7. 排序算法中——归并排序和快速排序

    冒泡排序.插入排序.选择排序这三种算法的时间复杂度都为 $O(n^2)$,只适合小规模的数据.今天,我们来认识两种时间复杂度为 $O(nlogn)$ 的排序算法--归并排序(Merge Sort)和快 ...

  8. 【DS】排序算法之归并排序(Merge Sort)

    一.算法思想 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法的一个非常典型的应用,指的是将两个已经排序的序列合并成一个序列的操作.其归并思想如下: 1)申请空间,使其大小为两个已经 ...

  9. c语言归并排序代码详细注释,C语言实现排序算法之归并排序详解

    排序算法中的归并排序(Merge Sort)是利用"归并"技术来进行排序.归并是指将若干个已排序的子文件合并成一个有序的文件. 一.实现原理: 1.算法基本思路 设两个有序的子文件 ...

  10. 排序算法-07归并排序(python实现)

    归并排序 概述 以归并操作为基础的排序算法,底层算法设计为分治法. 所谓分治法,就是讲问题分解为多个子问题递归求解,再将子问题答案合并. 算法实现 将待排序序列分解为两个,四个,,,n个子部分. 两两 ...

最新文章

  1. 如何实现linux+windows双系统启动
  2. sql注入-union select
  3. 《程序员的思维修炼》思维导图
  4. CTF-Web-基础知识点汇总
  5. JFreeChart插件
  6. 【全】Docker(二)-在Docker中部署Nginx实现负载均衡视频教程
  7. ‘dict’ object has no attribute 'has_key'
  8. 区块链技术人才严重不足,平均薪资 2.58 万
  9. shiro身份验证失败捕获的异常对应信息
  10. DH算法证明及相应的理论知识
  11. 记一次幸运的拼多多Web前端面试(一面+二面+hr面)
  12. Windows常见垃圾清理方式
  13. 征途服务器文件,如何使用云服务器架设征途
  14. android mvvm
  15. Microsoft (Office) 365本地无法激活解决方案
  16. AUTOCAD——特性匹配
  17. 【CRR-FMM】A Concise Review of Recent Few-shot Meta-learning Methods
  18. python培训 马哥 教室
  19. C#.NET 国密数字信封 民生银行
  20. ground truth解释

热门文章

  1. 强连通图------(1)通过两次DFS或BFS判断是不是强连通图
  2. 腾讯校园招聘笔试 2019-8-17 第五题
  3. splay伸展树基础操作(bzoj 1861: [Zjoi2006]Book 书架)
  4. 2018ACM-ICPC徐州赛区网络赛: D. Easy Math(Min_25筛)
  5. 2017哈尔滨ACM CCPC-final 总结
  6. bzoj 1131: [POI2008]Sta(DPS)
  7. bzoj 1673: [Usaco2005 Dec]Scales 天平(DFS)
  8. C++ STL 容器元素排列之next_permutation和prev_permutation的使用示范
  9. 吴恩达神经网络和深度学习-学习笔记-16-超参数的系统的调整方法
  10. matlab2c使用c++实现matlab函数系列教程-rot90函数