mergesort java 源码_MergeSort(Java)
实现代码:MergeSort.java
public class MergeSort {
public int[] sort(int[] input) {
if (input.length <= 1) return input;
if (input.length == 2) {
if (input[0] > input[1]) {
int temp = input[0];
input[0] = input[1];
input[1] = temp;
}
return input;
}
int mid = input.length / 2;
int[] firstHalf = sort(getPart(input, 0, mid));
int[] secondHalf = sort(getPart(input, mid + 1, input.length - 1));
return mergePart(firstHalf, secondHalf);
}
private int[] mergePart(int[] firstHalf, int[] secondHalf) {
int[] result = new int[firstHalf.length + secondHalf.length];
int firstIndex = 0, secondIndex = 0, resultIndex = 0;
while (resultIndex < result.length) {
if (chooseFirstHalf(firstHalf, firstIndex, secondHalf, secondIndex))
result[resultIndex++] = firstHalf[firstIndex++];
else
result[resultIndex++] = secondHalf[secondIndex++];
}
return result;
}
private boolean chooseFirstHalf(int[] firstHalf, int firstIndex, int[] secondHalf, int secondIndex) {
if (firstIndex == firstHalf.length) return false;
if (secondIndex == secondHalf.length) return true;
return firstHalf[firstIndex] < secondHalf[secondIndex];
}
private int[] getPart(int[] input, int begin, int end) {
int[] result = new int[end - begin + 1];
for (int i = begin; i <= end; i++) result[i - begin] = input[i];
return result;
}
}
测试代码:MergeSortTest.java
import org.junit.*;
import static org.junit.Assert.*;
public class MergeSortTest {
MergeSort mergeSort;
@Before
public void setUp() {
mergeSort = new MergeSort();
}
@Test
public void should_return_1_for_merge_sort_1() {
int[] input = {1};
int[] expected = {1};
assertArrayEquals(expected, mergeSort.sort(input));
}
@Test
public void should_return_12_for_merge_sort_21() {
int[] input = {2,1};
int[] expected = {1,2};
assertArrayEquals(expected, mergeSort.sort(input));
}
@Test
public void should_return_1234_for_merge_sort_3214() {
int[] input = {3,2,1,4};
int[] expected = {1,2,3,4};
assertArrayEquals(expected, mergeSort.sort(input));
}
@Test
public void should_return_12345_for_merge_sort_54321() {
int[] input = {5, 4, 3, 2, 1};
int[] expected = {1, 2, 3, 4, 5};
assertArrayEquals(expected, mergeSort.sort(input));
}
}
mergesort java 源码_MergeSort(Java)相关推荐
- Java源码解析——Java IO包
一.基础知识: 1. Java IO一般包含两个部分:1)java.io包中阻塞型IO:2)java.nio包中的非阻塞型IO,通常称为New IO.这里只考虑到java.io包中堵塞型IO: 2. ...
- Java 源码赏析 - java.lang - Void
被人鄙视了,于是也来读读源码... package java.lang;/*** The Void class is an uninstantiable placeholder class to ho ...
- 【JAVA源码分析——Java.lang】String源码分析
String 基本实现 初学java经常会误认为String是java基本类型,实际上String并非Java基本类型,String本质上是对char数组的封装. 以下是String实现相关源码 /* ...
- java 源码学习,Java源码剖析34讲学习笔记~4
详解 ThreadPoolExecutor 的参数含义及源码执行流程 前言 在阿里巴巴的开发者手册中针对线程池有如下说明: [强制]线程池不允许使用 Executors 去创建,而是通过 Thread ...
- Java源码:java.lang.reflect反射之AccessibleObject、ReflectionFactory、Filed、Method、Constructor类
//by yan 20191206 Java的反射机制,它的定义是:程序在运行中时,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性.简单的来说就是 ...
- 手机 查看java源码_pin.java 源代码在线查看 - 一个专门为手机写的程序 资源下载 虫虫电子下载站...
/*********************************************************************** * * *软件:公交路线选择软件 *作者:李蛟 *学校 ...
- 深入学习java源码之 Arrays.sort()与Arrays.parallelPrefix()
深入学习java源码之 Arrays.sort()与Arrays.parallelPrefix() Comparator接口 能对不同类型的对象进行排序(当然排序依据还是基本类型),也不用自己实现排序 ...
- 【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )
文章目录 一.安卓应用构建简介 二.Java 源码编译 三.AIDL 源码编译 一.安卓应用构建简介 使用 Android Studio 开发 Android 应用时 , 编译应用后在 Module ...
- java list e 查找_源码(04) -- java.util.ListE
java.util.List 源码分析(JDK1.7) ------------------------------------------------------------------------ ...
- java源码 - ReentrantLock之FairSync
开篇 这篇文章主要是讲解FairSync公平锁的源码分析,整个内容分为加锁过程.解锁过程,CLH队列等概念. 首先一直困扰我的CLH队列的CLH的缩写我终于明白,看似三个人的人名的首字符缩写&qu ...
最新文章
- K-近邻算法(KNN)概述
- socket的java实现_Socket之Java实现普通版本
- 【转】SQL Server联机丛书:存储过程及其创建
- 《Java核心技术》基于Java 17全面升级
- 2022年电工杯B题应急物资配送问题浅析
- QT从字体名获取字库文件路径(从宋体获取到simsun.ttc)
- win10无线网 服务器,win10专业版wifi变成地球怎么办_win10 wifi图标变成小地球无法连接网络如何解决...
- 市场调研报告-工业固体废物管理市场现状及未来发展趋势
- 【转载】史上最深(sàng)入(xīn)浅(bìng)出(kuáng)的IT术语解读【多测师_何sir】
- Word中硬回车与软回车的区别和用法
- 黑暗城堡(最短路径树)
- educoder Git进阶之合并远程分支、rebase、储藏
- 100个替代昂贵商业软件的开源应用/100 Open Source Replacements for Expensive Applications
- 十六进制转ASCII码表
- 我学ERP 之 金蝶ERP-K3_第4章 销售管理
- iPhone计算机没有删除键,iphone备份相片没删除键怎么用电脑删除
- h sm2 曲线参数_磁测量常用专业术语总结和磁性能参数对应的磁测量仪器
- 关于 AlphaBlend 和 32bpp 的反锯齿图标
- 企业破产重整网_最高法开通全国企业破产重整案件信息网
- 移动应用开发之路 01 Android Studio 项目文件介绍、创建虚拟机、完成第一个程序Hello World
热门文章
- 使用计时器setInterval实现倒计时
- 幸运福彩3d 是什么
- blender_(uv应用)................http://digitalman.blog.163.com/blog/static/23874605620174172058299/...
- FishC笔记—21 讲 函数:lambda表达式
- 基于Matlab的表面肌电信号处理软件设计与开发
- abaqus如何并行计算_Abaqus软件与并行计算的硬件配置
- 测试部门工作周报模板
- 度分秒换算题及答案C语言,度分换算(度分秒换算50题及答案)
- Android四大组件之广播
- 如何做数据仓库的有效需求分析