Java排序算法(一)——归并排序
介绍
归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。其排序的速度仅次于快速排序,时间复杂度O(n log n)。
Java代码实现
/*** 归并排序* @author rocky* @date 2021/9/10 10:34*/
public class MergeSort {public static int[] sort(int[] a, int low, int high) {int mid = (low + high) / 2;if (low < high) {// 左边归并排序sort(a, low, mid);// 右边归并排序sort(a, mid + 1, high);// 合并两个有序数组merge(a, low, mid, high);}return a;}public static void merge(int[] a, int low, int mid, int high) {int[] temp = new int[high - low + 1];int i = low;int j = mid + 1;int k = 0;while (i <= mid && j <= high) {// 对比大小,调整顺序if (a[i] < a[j]) {temp[k++] = a[i++];} else {temp[k++] = a[j++];}}// 右边剩余元素填充进temp中(因为前面已经归并,剩余的元素必会小于右边剩余的元素)while (i <= mid) {temp[k++] = a[i++];}// 右边剩余元素填充进temp中(因为前面已经归并,剩余的元素必会大于于左边剩余的元素)while (j <= high) {temp[k++] = a[j++];}// 调整数组顺序for (int x = 0; x < temp.length; x++) {a[x + low] = temp[x];}}public static void main(String[] args) {int[] a = {11, 6, 4, 7, 1, 31};sort(a, 0, a.length -1);Arrays.stream(a).forEach(System.out::println);}}
// 输出结果
1
4
6
7
11
31
Java排序算法(一)——归并排序相关推荐
- Java排序算法之归并排序
基本思想: 归并排序利用分治法,先将一个序列分成一个个子序列,然后对子序列进行排序,再把有序子序列合并为整体有序序列. 图片来自于http://www.cnblogs.com/shudonghe/p/ ...
- java 排序算法总结,Java排序算法总结之归并排序
本文实例讲述了Java排序算法总结之归并排序.分享给大家供大家参考.具体分析如下: 归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作.和快速排序类似,让我们一起来看 ...
- 排序算法:归并排序、快速排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.归并排序: 1.工作原理: 归 ...
- Java十大排序算法总结,Java排序算法总结之冒泡排序
本文实例讲述了Java排序算法总结之冒泡排序.分享给大家供大家参考.具体分析如下: 前言:冒泡排序(BubbleSort)就是依次比较相邻的两个数,将小数放在前面,大数放在后面. 下面让我们一起 ...
- 数据结构与算法:十大排序算法之归并排序
数据结构与算法:十大排序算法之归并排序 package TopTenSortingAlgorithms;/*** 归并排序:Java** @author skywang* @date 2014/03/ ...
- Java排序算法:冒泡排序
Java排序算法:冒泡排序 //创建数组并赋值int[] data = new int[] {11,10,55,78,100,111,45,56,79,90,345,1000};for(int i=0 ...
- 排序算法之--归并排序(好玩的一个算法o。o)快速入门
排序算法之--归并排序(好玩的一个算法o.o) 下面是归并操作的基本思路(注意:是归并操作哦,不是归并排序哦) 归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存 ...
- NOI提高级:排序算法之归并排序、快速排序
图解排序算法(四)之归并排序 图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园 小学生图解排序算法:⑥归并排序 小学生图解排序算法:⑥归并排序_纯文笔记-CSDN博客_图解 ...
- Java排序算法之直接选择排序
Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...
- java排序算法 sort_Java排序算法之SleepSort排序示例
本文实例讲述了Java排序算法之SleepSort排序.分享给大家供大家参考,具体如下: 分享一个很有创意的排序算法:sleepSort .巧妙利用了线程的sleep(),代码如下: public c ...
最新文章
- android帧动画实现方法之一
- ProcessDialogKey 方法实现回车自动换行
- IDA动态调试技术及Dump内存
- css之左边div固定宽度右边div自适应布局
- codeblocks 汉化
- 拼多多token是什么?如何提取及写入?
- 解决CMU-15-213-ICS的部分lab在部分64位系统WSL中btest无法运行的问题
- r语言决策树c4.5案例,C4.5主要思想与决策树实例
- 阻容感基础01:从宇宙起源到阻容感(1)
- 利用Python实现Excel合并单元格
- 关于nova服务项目的使用方法
- python批量关键字百度搜索结果url解码
- 谈人生理想与个人实现
- 老夫带你深度剖析Redisson实现分布式锁的原理
- 第07课:技术精进之道
- 趣味编程:从字符串中提取信息
- Arcgis主页面字体太小
- win10下使用JMeter5进行压力测试
- SQL中UPDATE 语句
- 前端面试之手写代码篇
热门文章
- python3扬州大学校园网认证登录与下线
- matlab学习技巧
- JAVA发送邮件(163邮箱发送)
- 数学建模软件lingo的基本使用方法
- 软考-中级-网络工程师-2021年下半年-上午真题整理
- 虹软科技Java人脸识别_java人脸识别 虹软ArcFace 2.0,java SDK使用、人脸识别-抽取人脸特征并做比对...
- python快速搭建网页_使用python快速搭建HTTP服务实现局域网网页浏览或文件传输...
- mysql 服务器配置信息和运行状态的查看(show variables like)
- SQL数据导出至Excel
- 固高板卡mct2008调试轴回零_更新-LabVIEW固高函数库源码文档调试软件-2019年4月14日...