Advertisement
gelita

Merge sort

Feb 19th, 2020
348
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 1.25 KB | None | 0 0
  1. /**
  2.  *  Problem 1: Mergesort
  3.  
  4.  *  Input:     {Array}
  5.  *  Output:    {Array}
  6.  *
  7.  *  Example:   [3,9,1,4,7] --> [1,3,4,7,9]
  8.  */
  9.  
  10. import java.util.*;
  11.  
  12. // Worst Time Complexity: O(N * log(N))
  13. // Worst Total (Call Stack + Auxiliary) Space Complexity: O(N)
  14. // Average Time Complexity: O(N * log(N))
  15. // Average Total (Call Stack + Auxiliary) Space Complexity: O(N)
  16. // Stability: Stable
  17. class Mergesort{
  18.   public static int[] compute(int[] input) {
  19.     if (input.length < 2) {
  20.             return input;
  21.     }
  22.     int mid = input.length / 2;
  23.     int[] leftArray = new int[mid];
  24.     int[] rightArray = new int[input.length - mid];
  25.     System.arraycopy(input, 0, leftArray, 0, leftArray.length);
  26.     System.arraycopy(input, mid, rightArray, 0, rightArray.length);
  27.     return merge(compute(leftArray), compute(rightArray));
  28.   }
  29.  
  30.   private static int[] merge(int[] array1, int[] array2){
  31.     int[] result = new int[array1.length + array2.length];
  32.     for (int i = 0, j = 0; i + j < result.length;) {
  33.         if (j >= array2.length || (i < array1.length && array1[i] < array2[j])) {
  34.             result[i + j] = array1[i];
  35.             i++;
  36.         } else {
  37.             result[i + j] = array2[j];
  38.             j++;
  39.         }
  40.     }
  41.    return result;
  42.    }
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement