MergeSort(Java)
来源:互联网 发布:项目性能优化 编辑:程序博客网 时间:2024/05/29 09:31
实现代码: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
- mergeSort java实现
- Mergesort in Java
- MergeSort
- mergesort
- MergeSort
- mergesort
- mergesort
- Mergesort
- mergesort
- mergeSort
- mergeSort
- mergesort
- MergeSort
- MergeSort
- MergeSort
- MergeSort
- 《大话设计模式》读书笔记:原型模式与Java的对象克隆
- Linux权限详解(转)
- 完整无线视频传输程序(已封装)
- WinForm 控件实现半透明效果,并可层叠显示
- 落花有意,流水无情
- MergeSort(Java)
- Android中的Intent原理,属性和使用方法
- 牛掰的二维码
- Java多线程 类库中的构件(一)
- vc2010 引用ActiveX控件
- QThread的一点理解
- 第4章 算法导论之递归式笔记
- 【Windows8开发】异步编程进阶篇之 单线程套间(STA)及如何控制task执行上下文
- ubuntu 输入法图标消失的解决方法