zoukankan      html  css  js  c++  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));
        }
    }
    


     

  • 相关阅读:
    安卓开发之ListAdapter(二)
    两listview联动
    不要天真了,这些简历HR一看就知道你是培训的,质量不佳的那种
    天真!这简历一看就是包装过的
    一线城市为何难逃离,职场饭局正在“失宠”?
    腾讯架构师分享的Java程序员需要突破的技术要点
    百度最穷程序员现身,工作4年晒出存款后,网友:你是真穷!
    震惊微软!招程序员的流程居然...
    python基础认识(一)
    input修改placeholder文字颜色
  • 原文地址:https://www.cnblogs.com/java20130722/p/3206877.html
Copyright © 2011-2022 走看看