Advertisement
Guest User

Untitled

a guest
Feb 26th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.04 KB | None | 0 0
  1. package facebook.prep.basic;
  2.  
  3. import org.junit.Assert;
  4. import org.junit.Test;
  5.  
  6. import java.util.Arrays;
  7.  
  8. public class MergeSort {
  9.  
  10.     public void sort(int[] array) {
  11.         divideAndMerge(array, 0, array.length);
  12.     }
  13.  
  14.     private void divideAndMerge(int[] array, int start, int end) {
  15.         if (end - start < 2) {
  16.             return;
  17.         }
  18.         int s1 = start;
  19.         int e1 = (start + end) / 2; // Exclusive
  20.         divideAndMerge(array, s1, e1);
  21.         int s2 = e1;      // Inclusive
  22.         int e2 = end;
  23.         divideAndMerge(array, s2, e2);
  24.  
  25.         int l1 = e1 - s1;
  26.         int l2 = e2 - s2;
  27.         if (l1 == 0 || l2 == 0) {
  28.             return;
  29.         }
  30.  
  31.         // Do merge
  32.         int[] tmp = new int[end - start];
  33.         int i1 = 0;
  34.         int i2 = 0;
  35.         while (i1 + i2 < l1 + l2) {
  36.             if (i1 == l1) {
  37.                 tmp[i1+i2] = array[s2+i2];
  38.                 i2++;
  39.             } else if (i2 == l2) {
  40.                 tmp[i1+i2] = array[s1+i1];
  41.                 i1++;
  42.             } else {
  43.                 if (array[s1 + i1] < array[s2 + i2]) {
  44.                     tmp[i1 + i2] = array[s1 + i1];
  45.                     i1++;
  46.                 } else {
  47.                     tmp[i1 + i2] = array[s2 + i2];
  48.                     i2++;
  49.                 }
  50.             }
  51.         }
  52.         System.arraycopy(tmp, 0, array, s1, e2 - s1);
  53.     }
  54.  
  55.     @Test
  56.     public void testEmpty() {
  57.         int[] array = new int[0];
  58.         sort(array);
  59.         Assert.assertArrayEquals(new int[0], array);
  60.     }
  61.  
  62.     @Test
  63.     public void test1() {
  64.         int[] array = new int[] {4, 3, 2, 1};
  65.         sort(array);
  66.         int[] expected = array.clone();
  67.         Arrays.sort(expected);
  68.         Assert.assertArrayEquals(expected, array);
  69.     }
  70.  
  71.     @Test
  72.     public void test2() {
  73.         int[] array = new int[] {4, 3, 2, 85, 2, 49, 18, 91};
  74.         sort(array);
  75.         int[] expected = array.clone();
  76.         Arrays.sort(expected);
  77.         Assert.assertArrayEquals(expected, array);
  78.     }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement