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