本文实例讲述了Java排序算法总结之归并排序。分享给大家供大家参考。具体分析如下:

归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。和快速排序类似,让我们一起来看,归并在Java中的实现。

归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。

归并排序算法稳定,数组需要O(n)的额外空间,链表需要O(log(n))的额外空间,时间复杂度为O(nlog(n)),算法不是自适应的,不需要对数据的随机读取。

工作原理:

1、申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

2、设定两个指针,最初位置分别为两个已经排序序列的起始位置

3、比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

4、重复步骤3直到某一指针达到序列尾

5、将另一序列剩下的所有元素直接复制到合并序列尾

代码实现:

public void mergeSort(){

long[] workSpace = new long[nElems];

recMergeSort(workSpace,0,nElems-1);

}

private void recMergeSort(long[] workSpace,int lowerBound,int upperBound){

if(lowerBound == upperBound){

return;

}

else{

int mid=(lowerBound+upperBound)/2;

recMergeSort(workSpace, lowerBound, mid);

recMergeSort(workSpace, mid+1, upperBound);

merge(workSpace, lowerBound, mid+1, upperBound);

}

}

private void merge(long[] workSpace,int lowPtr,int highPtr,int upperBound){

int j = 0;

int lowerBound = lowPtr;

int mid = highPtr - 1;

int n = upperBound-lowerBound+1;

while(lowPtr<=mid&&highPtr<=upperBound){

if(theArray[lowPtr]

workSpace[j++]=theArray[lowPtr++];

}

else{

workSpace[j++]=theArray[highPtr++];

}

}

while(lowPtr<=mid){

workSpace[j++] = theArray[lowPtr++];

}

while(highPtr<=upperBound){

workSpace[j++] = theArray[highPtr++];

}

for(j=0;j

theArray[lowerBound+j]=workSpace[j];

}

}

归并排序是比较稳定的排序.即相等的元素的顺序不会改变.如输入记录 1(1) 3(2) 2(3) 2(4) 5(5) (括号中是记录的关键字)时输出的 1(1) 2(3) 2(4) 3(2) 5(5) 中的2 和 2 是按输入的顺序.这对要排序数据包含多个信息而要按其中的某一个信息排序,要求其它信息尽量按输入的顺序排列时很重要.这也是它比快速排序优势的地方.

希望本文所述对大家的java程序设计有所帮助。

java二路归并排序算法,Java排序算法总结之归并排序相关推荐

  1. java常用的7大排序算法汇总

    这段时间闲了下来,就抽了点时间总结了下java中常用的七大排序算法,希望以后可以回顾! 1.插入排序算法 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经 ...

  2. Java常用的八种排序算法与代码实现

    在Java的时候,对于排序的应用需要熟练的掌握,这样才能够确保Java学习时候能够有扎实的基础能力.那Java有哪些排序算法呢?本文小千就来详细说说Java经典的8种排序算法. 经典的排序算法有八种, ...

  3. 程序兵法:Java String 源码的排序算法(一)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第103篇原创 <程序兵法:Java Str ...

  4. JAVA:实现 gnome sort侏儒排序算法(附完整源码)

    JAVA:实现 gnome sort侏儒排序算法 package com.thealgorithms.sorts;import static com.thealgorithms.sorts.SortU ...

  5. 归并有效排序算法matlab,科学网—[用MATLAB写算法]之排序算法2)归并排序merge sort - 徐勇刚的博文...

    归并排序(merge sort)是一种利用分治策略(divide and conquer)进行排序的算法,算法复杂度为 $\Theta (nlog_{2}n)$ . filename: merge_s ...

  6. 在Object-C中学习数据结构与算法之排序算法

    笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...

  7. c++ 二维数组 排序_【算法】排序算法之计数排序

    前几回,我们已经对[算法]排序算法之冒泡排序.[算法]排序算法之插入排序.[算法]排序算法之希尔排序.[算法]排序算法之选择排序.[算法]排序算法之快速排序.[算法]排序算法之归并排序.[算法]排序算 ...

  8. 数据结构与算法(三) 排序算法(代码示例)

    数据结构与算法三 排序算法 1. 选择排序 2. 插入排序 3. 冒泡排序 4. 归并排序 5. 快速排序 6. 希尔排序 7. 堆排序 总结 1. 选择排序 选择排序的基本原理: 对于未排序的一组记 ...

  9. 数据结构与算法之排序算法

    数据结构与算法之排序算法 排序算法的介绍 ​ 排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排序的过程. 排序的分类 1)内部排序:指将需要处理的数据都加载到内部 ...

  10. 【图解算法】排序算法——快速排序

    简介 首先还是得简单的介绍一下快速排序这个算法. 快速排序(Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下, ...

最新文章

  1. 12月12日学习内容整理:Ajax中的contentType参数,csrf跨域请求处理,serialize方法...
  2. 【思维导图】音乐为何会让我们产生特定情绪?
  3. Android图片剪裁库
  4. Linux 上的高可用中间件
  5. JSP——JavaBean应用
  6. 给定0~N之间的N个数字(大于等于0,小于N,不重复)进行按小到大排列(不用其它的经典排序算法)
  7. [下载地址] Subclipse 1.10.9(SVN) _附说明
  8. pytorch 之 imagefloder的用法
  9. ajax json node 布尔值_ajax和axios、fetch的区别
  10. 838计算机专业课包含什么,华南农业大学
  11. 苹果Mac怎样切换大写输入法?
  12. spss多元线性回归散点图_SPSS多元线性回归.pdf
  13. gantt图 classDiagram图应用举例 南北朝更迭图 南北朝帝王关系类图
  14. 计算机的cpu占用到多少会卡,CPU占用100%!PC卡顿原来可以这么解决:多场景多任务也流畅...
  15. 2021-07-04——在线考试系统设计
  16. linux 编译配置内核路由功能,Linux下多播路由的实现-网管专栏,防火墙和路由
  17. 51单片机基础之继电器
  18. Wireshark数据抓包分析之域名系统协议
  19. 整合DL4J训练模型与Web工程
  20. elasticsearch 客户端工具ESClientRHL

热门文章

  1. HTML转义字符参照表
  2. 学习matlab体会,学习matlab心得体会.doc
  3. Java拦截器验证失败时返回Json格式数据
  4. uat测试用例和sit测试用例_测试理论——SIT测试 和 UAT测试概念
  5. 转载:Visio2013的密钥
  6. SQL语句——查询语句
  7. 扇贝编程python骗局-原来用Python薅羊毛这么简单!后悔错过了那么多机会
  8. 数据结构(C语言版 第2版)课后习题答案 严蔚敏 编著
  9. 计算机与编程基础知识
  10. 多用户微信多级分销系统源码php,PHP微信多级三级分销体系源码 领取宝微信双领取_源码下载...