Advertisement
P_Donchev

Khan Academy - Merge Sort

Dec 17th, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Takes in an array that has two sorted subarrays,
  2. //  from [p..q] and [q+1..r], and merges the array
  3. var merge = function(array, p, q, r) {
  4.     var lowHalf = [];
  5.     var highHalf = [];
  6.  
  7.     var k = p;
  8.     var i;
  9.     var j;
  10.     for (i = 0; k <= q; i++, k++) {
  11.         lowHalf[i] = array[k];
  12.     }
  13.     for (j = 0; k <= r; j++, k++) {
  14.         highHalf[j] = array[k];
  15.     }
  16.  
  17.     k = p;
  18.     i = 0;
  19.     j = 0;
  20.    
  21.     // Repeatedly compare the lowest untaken element in
  22.     //  lowHalf with the lowest untaken element in highHalf
  23.     //  and copy the lower of the two back into array
  24.     while (i < lowHalf.length && j < highHalf.length) {
  25.         if (lowHalf[i] < highHalf[j]) {
  26.             array[k] = lowHalf[i];
  27.             i++;
  28.         } else {
  29.             array[k] = highHalf[j];
  30.             j++;
  31.         }
  32.         k++;
  33.    
  34.     }
  35.    
  36.    
  37.     // Once one of lowHalf and highHalf has been fully copied
  38.     //  back into array, copy the remaining elements from the
  39.     //  other temporary array back into the array
  40.    
  41.     while (i < lowHalf.length) {
  42.         array[k] = lowHalf[i];
  43.         i++;
  44.         k++;
  45.     }
  46.    
  47.     while (j < highHalf.length) {
  48.         array[k] = highHalf[j];
  49.         j++;
  50.         k++;
  51.     }
  52.    
  53. };
  54.  
  55.  
  56. var array = [3, 7, 12, 14, 2, 6, 9, 11];
  57. merge(array, 0,
  58.     Math.floor((0 + array.length-1) / 2),
  59.     array.length-1);
  60. println("Array after merging: " + array);
  61. Program.assertEqual(array, [2, 3, 6, 7, 9, 11, 12, 14]);
  62.  
  63. array = [12, 15, 50, -5, 0, 21];
  64. merge(array, 0,
  65.     Math.floor((0 + array.length-1) / 2),
  66.     array.length-1);
  67. println("Array after merging: " + array);
  68. Program.assertEqual(array, [-5, 0, 12, 15, 21, 50]);
  69.  
  70.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement