Algorithms: Implement Merge Sort
This commit is contained in:
		
							parent
							
								
									016f31d703
								
							
						
					
					
						commit
						33c0806441
					
				
							
								
								
									
										46
									
								
								Algorithms/mergeSort.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								Algorithms/mergeSort.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,46 @@
 | 
			
		||||
// https://www.freecodecamp.org/learn/coding-interview-prep/algorithms/implement-merge-sort
 | 
			
		||||
 | 
			
		||||
function mergeSort(array) {
 | 
			
		||||
  // Only change code below this line
 | 
			
		||||
  let merges = Math.floor(array.length / 2);
 | 
			
		||||
  let mergeSize = 1;
 | 
			
		||||
  let stop = false;
 | 
			
		||||
  while (!stop) {
 | 
			
		||||
    stop = merges ? false : true;
 | 
			
		||||
    const array2 = [];
 | 
			
		||||
    for (let i = 0; i <= merges; i++) {
 | 
			
		||||
      const leftArrayStart = i * mergeSize * 2;
 | 
			
		||||
      const rightArrayStart = leftArrayStart + mergeSize;
 | 
			
		||||
      const leftArrayEnd = Math.min(rightArrayStart, array.length);
 | 
			
		||||
      const rightArrayEnd = Math.min(rightArrayStart + mergeSize, array.length);
 | 
			
		||||
      let leftI = leftArrayStart; // left array pointer
 | 
			
		||||
      let rightI = rightArrayStart; // right array pointer
 | 
			
		||||
      while (leftI < leftArrayEnd && rightI < rightArrayEnd) {
 | 
			
		||||
        if (array[leftI] <= array[rightI]) {
 | 
			
		||||
          array2.push(array[leftI++]);
 | 
			
		||||
        } else {
 | 
			
		||||
          array2.push(array[rightI++]);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      while (leftI < leftArrayEnd) {
 | 
			
		||||
        array2.push(array[leftI++]);
 | 
			
		||||
      }
 | 
			
		||||
      while (rightI < rightArrayEnd) {
 | 
			
		||||
        array2.push(array[rightI++]);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    array = array2;
 | 
			
		||||
    mergeSize *= 2;
 | 
			
		||||
    merges = Math.floor(merges / 2);
 | 
			
		||||
  }
 | 
			
		||||
  return array;
 | 
			
		||||
  // Only change code above this line
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
console.log(mergeSort([4, 2, 1, 6, 5, 3, 0]));
 | 
			
		||||
console.log(
 | 
			
		||||
  mergeSort([
 | 
			
		||||
    1, 4, 2, 8, 345, 123, 43, 32, 5643, 63, 123, 43, 2, 55, 1, 234, 92,
 | 
			
		||||
  ])
 | 
			
		||||
);
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user