排序算法之------归并排序
归并算法: 要将一个数组排序,可以先(递归地)将它分成两半分别排序,然后将结果归并起来。
时间复杂度为 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.工作原理: 归 ...
- 排序算法之--归并排序(好玩的一个算法o。o)快速入门
排序算法之--归并排序(好玩的一个算法o.o) 下面是归并操作的基本思路(注意:是归并操作哦,不是归并排序哦) 归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存 ...
- NOI提高级:排序算法之归并排序、快速排序
图解排序算法(四)之归并排序 图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园 小学生图解排序算法:⑥归并排序 小学生图解排序算法:⑥归并排序_纯文笔记-CSDN博客_图解 ...
- 数据结构与算法:十大排序算法之归并排序
数据结构与算法:十大排序算法之归并排序 package TopTenSortingAlgorithms;/*** 归并排序:Java** @author skywang* @date 2014/03/ ...
- [Alg]排序算法之归并排序
[Alg]排序算法之归并排序 作者:屎壳郎 miaosg01@163.com 日期:Aug 2021 版次:初版 简介: 归并排序是一类在任何情况下都能保证Nlg(N)N\lg(N)Nlg(N)的排 ...
- 【排序算法】归并排序(C语言)
[排序算法]-- 归并排序(C语言) 目录 一.归并排序的原理 二.两个有序数组排序和合并 1. 原地排序 2. 创建临时空间 二.递归实现 三.非递归实现 1. 实现思路 2. 数组边界问题 3. ...
- 排序算法中——归并排序和快速排序
冒泡排序.插入排序.选择排序这三种算法的时间复杂度都为 $O(n^2)$,只适合小规模的数据.今天,我们来认识两种时间复杂度为 $O(nlogn)$ 的排序算法--归并排序(Merge Sort)和快 ...
- 【DS】排序算法之归并排序(Merge Sort)
一.算法思想 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法的一个非常典型的应用,指的是将两个已经排序的序列合并成一个序列的操作.其归并思想如下: 1)申请空间,使其大小为两个已经 ...
- c语言归并排序代码详细注释,C语言实现排序算法之归并排序详解
排序算法中的归并排序(Merge Sort)是利用"归并"技术来进行排序.归并是指将若干个已排序的子文件合并成一个有序的文件. 一.实现原理: 1.算法基本思路 设两个有序的子文件 ...
- 排序算法-07归并排序(python实现)
归并排序 概述 以归并操作为基础的排序算法,底层算法设计为分治法. 所谓分治法,就是讲问题分解为多个子问题递归求解,再将子问题答案合并. 算法实现 将待排序序列分解为两个,四个,,,n个子部分. 两两 ...
最新文章
- 如何实现linux+windows双系统启动
- sql注入-union select
- 《程序员的思维修炼》思维导图
- CTF-Web-基础知识点汇总
- JFreeChart插件
- 【全】Docker(二)-在Docker中部署Nginx实现负载均衡视频教程
- ‘dict’ object has no attribute 'has_key'
- 区块链技术人才严重不足,平均薪资 2.58 万
- shiro身份验证失败捕获的异常对应信息
- DH算法证明及相应的理论知识
- 记一次幸运的拼多多Web前端面试(一面+二面+hr面)
- Windows常见垃圾清理方式
- 征途服务器文件,如何使用云服务器架设征途
- android mvvm
- Microsoft (Office) 365本地无法激活解决方案
- AUTOCAD——特性匹配
- 【CRR-FMM】A Concise Review of Recent Few-shot Meta-learning Methods
- python培训 马哥 教室
- C#.NET 国密数字信封 民生银行
- ground truth解释
热门文章
- 强连通图------(1)通过两次DFS或BFS判断是不是强连通图
- 腾讯校园招聘笔试 2019-8-17 第五题
- splay伸展树基础操作(bzoj 1861: [Zjoi2006]Book 书架)
- 2018ACM-ICPC徐州赛区网络赛: D. Easy Math(Min_25筛)
- 2017哈尔滨ACM CCPC-final 总结
- bzoj 1131: [POI2008]Sta(DPS)
- bzoj 1673: [Usaco2005 Dec]Scales 天平(DFS)
- C++ STL 容器元素排列之next_permutation和prev_permutation的使用示范
- 吴恩达神经网络和深度学习-学习笔记-16-超参数的系统的调整方法
- matlab2c使用c++实现matlab函数系列教程-rot90函数