在Arrays.java中的sort中
    public static void sort(Object[] a, int fromIndex, int toIndex) {if (LegacyMergeSort.userRequested)legacyMergeSort(a, fromIndex, toIndex);elseComparableTimSort.sort(a, fromIndex, toIndex);}/** To be removed in a future release. */private static void legacyMergeSort(Object[] a,int fromIndex, int toIndex) {rangeCheck(a.length, fromIndex, toIndex);Object[] aux = copyOfRange(a, fromIndex, toIndex);mergeSort(aux, a, fromIndex, toIndex, -fromIndex);}/*** Tuning parameter: list size at or below which insertion sort will be* used in preference to mergesort.* To be removed in a future release.*/private static final int INSERTIONSORT_THRESHOLD = 7;/*** Src is the source array that starts at index 0* Dest is the (possibly larger) array destination with a possible offset* low is the index in dest to start sorting* high is the end index in dest to end sorting* off is the offset to generate corresponding low, high in src* To be removed in a future release.*/private static void mergeSort(Object[] src,Object[] dest,int low,int high,int off) {int length = high - low;// Insertion sort on smallest arraysif (length < INSERTIONSORT_THRESHOLD) {for (int i=low; i<high; i++)for (int j=i; j>low &&((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)swap(dest, j, j-1);return;}// Recursively sort halves of dest into srcint destLow  = low;int destHigh = high;low  += off;high += off;int mid = (low + high) >>> 1;mergeSort(dest, src, low, mid, -off);mergeSort(dest, src, mid, high, -off);// If list is already sorted, just copy from src to dest.  This is an// optimization that results in faster sorts for nearly ordered lists.if (((Comparable)src[mid-1]).compareTo(src[mid]) <= 0) {System.arraycopy(src, low, dest, destLow, length);return;}// Merge sorted halves (now in src) into destfor(int i = destLow, p = low, q = mid; i < destHigh; i++) {if (q >= high || p < mid && ((Comparable)src[p]).compareTo(src[q])<=0)dest[i] = src[p++];elsedest[i] = src[q++];}}

转载于:https://www.cnblogs.com/zhwj184/archive/2012/11/02/3027455.html

java jdk中的归并排序实现相关推荐

  1. 观察者模式--java jdk中提供的支持

    一.简介 观察者设计模式有如下四个角色 抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者.抽象主题提供一个接口,可以增加和删除观察者角色.一般用一个抽象 ...

  2. Java JDK中几个经典的版本

    Java JDK中几个经典的版本 1. 1995年05月23日 JDK 1.0 版发布,于1996年JDK正式提供下载,标志着Java的诞生. 2. 1998年12月04日 JDK 1.2 版发布,而 ...

  3. Java jdk中的部分工具javac javaw javaws javadoc javah javap jar jdb jps的作用

    一.JDK 工具和实用程序 JDK提供的标准工具和程序 基本工具:javac, java, javadoc, apt, appletviewer, jar, jdb, javah, javap, ex ...

  4. 设计模式:单例模式在JDK中的应用

    在java jdk中, java.lang.Runtime就是经典的单例模式. 以下截取Runtime部分代码 package java.lang;import java.io.*; import j ...

  5. 【开源与项目实战:开源实战】77 | 开源实战一(下):通过剖析Java JDK源码学习灵活应用设计模式

    上一节课,我们讲解了工厂模式.建造者模式.装饰器模式.适配器模式在 Java JDK 中的应用,其中,Calendar 类用到了工厂模式和建造者模式,Collections 类用到了装饰器模式.适配器 ...

  6. Redis源码和java jdk源码中hashcode的不同实现

    一.redis实际上是使用了siphash 这个比较简单,我说的简单是指redis代码比较少不像jdk一样调用C++代码调用栈非常深. 先看这个rehashing.c 主要就是dictKeyHash函 ...

  7. 阿里技术专家加多:Java异步编程实战之基于JDK中的Future实现异步编程 | 文末赠书...

    正文共:14244 字 8 图 预计阅读时间: 36 分钟 本节内容摘自<Java异步编程实战>中的一小节. 一.前言 本节主要讲解如何使用JDK中的Future实现异步编程,这包含如何使 ...

  8. JDK中提供的实现——通过 java.util.Observable 类和 java.util.Observer 接口定义了观察者模式,只要实现它们的子类就可以编写观察者模式实例

    JDK中提供的实现 在 Java 中,通过 java.util.Observable 类和 java.util.Observer 接口定义了观察者模式,只要实现它们的子类就可以编写观察者模式实例. 1 ...

  9. jdk中java_怎样使用JavaJDK中Java?

    什么是UDP协议 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层--传输层,处于IP协议的上一层.UDP有不提供数据报分组.组装和不能对数据包的排序的 ...

最新文章

  1. 一个大型网游需要哪些代码块_你会因为网游的非公平性,而转投单机游戏阵营吗?...
  2. python从sqlserver提取数据_通过Python读取sqlserver数据写成json文件的总结
  3. [BUUCTF-pwn]——hitcontraining_uaf
  4. 异步fifo_跨时钟域同步(异步FIFO)
  5. python手势识别隐马尔可夫模型_使用隐马尔可夫模型的运动笔迹手势识别.doc
  6. leetcode题库:2.两数相加
  7. 代码和mysql服务器编码不一致_PL/SQL Developer教程:解决oracle服务器端和客户端字符编码不一致问题...
  8. oracle 日志解析工具,Oracle logminer 日志分析工具使用
  9. 音视频编解码常用知识点
  10. 两个特别的10分钟临时邮箱、免费
  11. 谷歌AI新进展!将静态照片生成3D动图;代码翻译与代码生成工具;C/Java/Python多种语言项目实战教程大汇总;开源知识社区软件;前沿论文 | ShowMeAI资讯日报
  12. 数据挖掘中的模式发现(七)GSP算法、SPADE算法、PrefixSpan算法
  13. js-页面需展示大量图片时,采用lyz.delayLoading.min.js,图片在屏幕时加载显示
  14. 文学档次,也可以是背出来的【148…
  15. 不一样的发布会 库克开场就谈隐私和环保
  16. 贝叶斯概率综述和课堂思路整理.2
  17. Windows XP自动登录设置
  18. [论文阅读] Adversarial Learning for Semi-Supervised Semantic Segmentation
  19. Linux安装MySQL的小波折
  20. 使用Map集合来做一个不同姓氏人数的统计

热门文章

  1. gatsby_将您的GraphCMS数据导入Gatsby
  2. aws lambda使用_如何使用AWS Lambda和S3构建无服务器URL缩短器
  3. Jmeter 使用自定义变量
  4. 记录智能指针使用shared_ptr使用错误
  5. 拯救尴尬:鉴黄神器NSFW JS开源了!
  6. Java入门—输入输出流
  7. shiro多realm验证之——shiro实现不同身份使用不同Realm进行验证(转)
  8. spring+ (activeMQ) 实现queue与topic
  9. html5地理定位数据
  10. Java中元组的使用