add merge-sort (#264)

pull/269/head
Divesh Arora 2021-04-26 20:27:55 +05:30 committed by GitHub
parent eff01210bf
commit 6df823b865
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 0 deletions

View File

@ -15,6 +15,7 @@
1. [Bubble Sort](src/sorting/bubble-sort.js)
2. [Insertion Sort](src/sorting/insertion-sort.js)
3. [Selection Sort](src/sorting/selection-sort.js)
4. [Merge Sort](src/sorting/merge-sort.js)
## Strings
1. [Palindrome](src/strings/palindrome.js)

View File

@ -0,0 +1,32 @@
function merge(left, right) {
let arr = []
// Break out of loop if any one of the array gets empty
while (left.length && right.length) {
// Pick the smaller among the smallest element of left and right sub arrays
if (left[0] < right[0]) {
arr.push(left.shift())
} else {
arr.push(right.shift())
}
}
// Concatenating the leftover elements
// (in case we didn't go through the entire left or right array)
return [ ...arr, ...left, ...right ]
}
function mergeSort(array) {
const half = array.length / 2
// Base case or terminating case
if(array.length < 2){
return array
}
const left = array.splice(0, half)
return merge(mergeSort(left),mergeSort(array))
}
//testing
array = [4, 8, 7, 2, 11, 1, 3];
console.log(mergeSort(array));