java jdk中的归并排序实现
在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中的归并排序实现相关推荐
- 观察者模式--java jdk中提供的支持
一.简介 观察者设计模式有如下四个角色 抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者.抽象主题提供一个接口,可以增加和删除观察者角色.一般用一个抽象 ...
- Java JDK中几个经典的版本
Java JDK中几个经典的版本 1. 1995年05月23日 JDK 1.0 版发布,于1996年JDK正式提供下载,标志着Java的诞生. 2. 1998年12月04日 JDK 1.2 版发布,而 ...
- Java jdk中的部分工具javac javaw javaws javadoc javah javap jar jdb jps的作用
一.JDK 工具和实用程序 JDK提供的标准工具和程序 基本工具:javac, java, javadoc, apt, appletviewer, jar, jdb, javah, javap, ex ...
- 设计模式:单例模式在JDK中的应用
在java jdk中, java.lang.Runtime就是经典的单例模式. 以下截取Runtime部分代码 package java.lang;import java.io.*; import j ...
- 【开源与项目实战:开源实战】77 | 开源实战一(下):通过剖析Java JDK源码学习灵活应用设计模式
上一节课,我们讲解了工厂模式.建造者模式.装饰器模式.适配器模式在 Java JDK 中的应用,其中,Calendar 类用到了工厂模式和建造者模式,Collections 类用到了装饰器模式.适配器 ...
- Redis源码和java jdk源码中hashcode的不同实现
一.redis实际上是使用了siphash 这个比较简单,我说的简单是指redis代码比较少不像jdk一样调用C++代码调用栈非常深. 先看这个rehashing.c 主要就是dictKeyHash函 ...
- 阿里技术专家加多:Java异步编程实战之基于JDK中的Future实现异步编程 | 文末赠书...
正文共:14244 字 8 图 预计阅读时间: 36 分钟 本节内容摘自<Java异步编程实战>中的一小节. 一.前言 本节主要讲解如何使用JDK中的Future实现异步编程,这包含如何使 ...
- JDK中提供的实现——通过 java.util.Observable 类和 java.util.Observer 接口定义了观察者模式,只要实现它们的子类就可以编写观察者模式实例
JDK中提供的实现 在 Java 中,通过 java.util.Observable 类和 java.util.Observer 接口定义了观察者模式,只要实现它们的子类就可以编写观察者模式实例. 1 ...
- jdk中java_怎样使用JavaJDK中Java?
什么是UDP协议 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层--传输层,处于IP协议的上一层.UDP有不提供数据报分组.组装和不能对数据包的排序的 ...
最新文章
- 一个大型网游需要哪些代码块_你会因为网游的非公平性,而转投单机游戏阵营吗?...
- python从sqlserver提取数据_通过Python读取sqlserver数据写成json文件的总结
- [BUUCTF-pwn]——hitcontraining_uaf
- 异步fifo_跨时钟域同步(异步FIFO)
- python手势识别隐马尔可夫模型_使用隐马尔可夫模型的运动笔迹手势识别.doc
- leetcode题库:2.两数相加
- 代码和mysql服务器编码不一致_PL/SQL Developer教程:解决oracle服务器端和客户端字符编码不一致问题...
- oracle 日志解析工具,Oracle logminer 日志分析工具使用
- 音视频编解码常用知识点
- 两个特别的10分钟临时邮箱、免费
- 谷歌AI新进展!将静态照片生成3D动图;代码翻译与代码生成工具;C/Java/Python多种语言项目实战教程大汇总;开源知识社区软件;前沿论文 | ShowMeAI资讯日报
- 数据挖掘中的模式发现(七)GSP算法、SPADE算法、PrefixSpan算法
- js-页面需展示大量图片时,采用lyz.delayLoading.min.js,图片在屏幕时加载显示
- 文学档次,也可以是背出来的【148…
- 不一样的发布会 库克开场就谈隐私和环保
- 贝叶斯概率综述和课堂思路整理.2
- Windows XP自动登录设置
- [论文阅读] Adversarial Learning for Semi-Supervised Semantic Segmentation
- Linux安装MySQL的小波折
- 使用Map集合来做一个不同姓氏人数的统计