Aldin-SXR

BottomUpMergeSort.java

Mar 31st, 2020
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.22 KB | None | 0 0
  1. package ds.merge.sort.recursive;
  2.  
  3. public class BottomUpMergeSort extends AbstractSort {
  4.  
  5.     /* Bottom-up merge sort implementation */
  6.     public static void sort(int[] elements) {
  7.         int[] aux = new int[elements.length];                                       // 1
  8.         for (int size = 1; size < elements.length; size *= 2) {                     // 2
  9.             for (int low = 0; low < elements.length - size; low += 2 * size) {      // 3
  10.                 int mid = low + size - 1;                                           // 4
  11.                 int high = Math.min(low + 2 * size - 1, elements.length - 1);       // 4
  12.                 merge(elements, aux, low, mid, high);                               // 5
  13.             }
  14.         }
  15.     }
  16.    
  17.     /* Merge the two sorted sub-arrays into a larger sorted (sub)array */
  18.     private static void merge(int[] elements, int[] aux, int low, int mid, int high) {
  19.        
  20.         for (int k = low; k <= high; k++) {             // 1
  21.             aux[k] = elements[k];                       // 1
  22.         }          
  23.        
  24.         int i = low;                                    // 2
  25.         int j = mid + 1;                                // 2
  26.         for (int k = low; k <= high; k++) {             // 3
  27.             if (i > mid) {                              // 4
  28.                 elements[k] = aux[j++];                 // 4
  29.             } else if (j > high) {                      // 5
  30.                 elements[k] = aux[i++];                 // 5
  31.             } else if (less(aux[j], aux[i])) {          // 6
  32.                 elements[k] = aux[j++];                 // 6
  33.             } else {                                    // 7
  34.                 elements[k] = aux[i++];                 // 7
  35.             }
  36.         }
  37.     }
  38. }
Advertisement
Add Comment
Please, Sign In to add comment