mergesort java 源码_MergeSort(Java)

mergesort java 源码_MergeSort(Java)实现代码 MergeSort javapubliccl publicint sort int input if input length lt 1 returninput if input length 2 if input 0 gt input 1 inttemp input 0 input 0 in

实现代码: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));

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216187.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午12:21
下一篇 2026年3月18日 下午12:21


相关推荐

  • laravel5.4 前后台未登陆,跳转到各自的页面

    laravel5.4 前后台未登陆,跳转到各自的页面

    2021年10月25日
    38
  • Eclipse汉化教程——只用于学习用途

    Eclipse汉化教程——只用于学习用途Eclipse2019版本汉化教程首先这里我已经做了汉化了,但是不影响各位学习怎么汉化,首先打开工具栏的帮助按钮,选中倒数第四个按钮,如下图所示(看不懂英文的朋友不要紧,对照图上位置即可),如下图所示:然后会打开这个页面然后打开这个网址(默认是英文的)语言包地址(点击左边这个蓝色的字体)出现下面的页面复制图中标记的地址注意官网这个地址中,如果用谷歌浏览器翻译后:号用的是中…

    2022年5月3日
    47
  • python 去掉文件后缀名,python 删除后缀名文件

    python 去掉文件后缀名,python 删除后缀名文件Note:print语句供test用#!/usr/bin/pythonimportos,re,time,sysimportos.pathimportstringfilter_dir=”/home/fengnazh/splittest/files/”filterfile_list=os.listdir(filter_dir)printfilterfile_listfile_i…

    2022年5月7日
    336
  • centos7密码复杂度设置(centos编辑文件)

    Linux系统-CentOS6-知识简谱。图谱内各部分的详细知识请关注学习路上-CentOS专栏。

    2022年4月15日
    146
  • c语言网格搜索,使用逻辑回归时怎么利用网格搜索来查找degree,c等超参数

    c语言网格搜索,使用逻辑回归时怎么利用网格搜索来查找degree,c等超参数非常好的问题 如何将自定义的 Pipline 对象应用于 sklearn 内置的网格搜索确实是课程没有讲的一个 sklearn 使用上的语法细节 首先 你在 31 行的注释分析的是正确的 由于此时 你在构建 grid search 的时候 传入的算法是 log reg 而 log reg 是 LogisticRegr 的对象 但是创建 LogisticRegr 是并不需要参数 degree 所以 这里会报错

    2026年3月26日
    2
  • 微软面试-微软面试题(5)[通俗易懂]

    微软面试-微软面试题(5)[通俗易懂]微软面试题-头脑  ★如果你有一个许多部件可以拆卸的时钟,你将它一块块拆开,但是没有记住是怎样拆的。然后你将各个零件重新组装起来,最后发现有三个重要零件没有放进去。这时你如何重新组装这个时钟?  ★如果你需要学习一门新的计算机语言,你会怎样做?  ★假设由你负责设计比尔·盖茨的卫生间。当然,钱不成问题,但是你不可以和比尔谈。你会怎样做?  ★到目前为止,你遇到的最难回答的问题是什么?  ★如果微软

    2022年8月26日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号