Advertisement
Guest User

dalex

a guest
Jul 16th, 2011
358
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.53 KB | None | 0 0
  1. // mergesort for you
  2.  
  3. static class Utils {
  4.  
  5.     private Utils() {}
  6.  
  7.     public static void mergeSort(int[] a) {
  8.         mergeSort(a, 0, a.length - 1);
  9.     }
  10.  
  11.     private static void mergeSort(int[] a, int leftIndex, int rightIndex) {
  12.         final int MAGIC_VALUE = 50;
  13.         if (leftIndex < rightIndex) {
  14.             if (rightIndex - leftIndex <= MAGIC_VALUE) {
  15.                 insertionSort(a, leftIndex, rightIndex);
  16.             } else {
  17.                 int middleIndex = (leftIndex + rightIndex) / 2;
  18.                 mergeSort(a, leftIndex, middleIndex);
  19.                 mergeSort(a, middleIndex + 1, rightIndex);
  20.                 merge(a, leftIndex, middleIndex, rightIndex);
  21.             }
  22.         }
  23.     }
  24.  
  25.     private static void merge(int[] a, int leftIndex, int middleIndex, int rightIndex) {
  26.         int length1 = middleIndex - leftIndex + 1;
  27.         int length2 = rightIndex - middleIndex;
  28.         int[] leftArray = new int[length1];
  29.         int[] rightArray = new int[length2];
  30.         System.arraycopy(a, leftIndex, leftArray, 0, length1);
  31.         System.arraycopy(a, middleIndex + 1, rightArray, 0, length2);
  32.         for (int k = leftIndex, i = 0, j = 0; k <= rightIndex; k++) {
  33.             if (i == length1) {
  34.                 a[k] = rightArray[j++];
  35.             } else if (j == length2) {
  36.                 a[k] = leftArray[i++];
  37.             } else {
  38.                 a[k] = leftArray[i] <= rightArray[j] ? leftArray[i++] : rightArray[j++];
  39.             }
  40.         }
  41.     }
  42.  
  43.     private static void insertionSort(int[] a, int leftIndex, int rightIndex) {
  44.         for (int i = leftIndex + 1; i <= rightIndex; i++) {
  45.             int current = a[i];
  46.             int j = i - 1;
  47.             while (j >= leftIndex && a[j] > current) {
  48.                 a[j + 1] = a[j];
  49.                 j--;
  50.             }
  51.             a[j + 1] = current;
  52.         }
  53.     }
  54.  
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement