Lesnic

DSA 2

Mar 27th, 2020
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 0.98 KB | None | 0 0
  1. import java.util.Arrays;
  2. //Gorozhankin Egor BS19-01
  3.  
  4. // out-of-place
  5. // stable in every situation O(n log n)
  6.  
  7. public class MergeSort<T> implements Comparable<T> { // O(n log n)
  8.     public static <T> T[] mergeSort(T[] array) {
  9.         return mergeSort(array, 0, array.length - 1);
  10.     }
  11.    
  12.    
  13.     @SuppressWarnings("unchecked")
  14.     public static <T> T[] mergeSort(T[] array, int left, int right) {
  15.         if (left == right)
  16.             return array;
  17.  
  18.         int mid = (left + right) / 2;
  19.         mergeSort(array, left, mid);
  20.         mergeSort(array, mid + 1, right);
  21.  
  22.         int i = left, j = mid + 1;
  23.         T[] sorted = (T[]) new Object[right - left + 1];
  24.  
  25.         for (int k = 0; k < sorted.length; k++) {
  26.             if (i > mid || (j <= right && ((Comparable<T>) array[i]).compareTo(array[j]) > 0))
  27.                 sorted[k] = array[j++];
  28.             else
  29.                 sorted[k] = array[i++];
  30.         }
  31.  
  32.         for (int k = 0; k < sorted.length; k++)
  33.             array[k + left] = sorted[k];
  34.  
  35.         return array;
  36.     }
  37.  
  38.     @Override
  39.     public int compareTo(T o) {
  40.         return this.compareTo(o);
  41.     }
  42. }
Advertisement
Add Comment
Please, Sign In to add comment