add merge-sort (#264)
parent
eff01210bf
commit
6df823b865
|
@ -15,6 +15,7 @@
|
||||||
1. [Bubble Sort](src/sorting/bubble-sort.js)
|
1. [Bubble Sort](src/sorting/bubble-sort.js)
|
||||||
2. [Insertion Sort](src/sorting/insertion-sort.js)
|
2. [Insertion Sort](src/sorting/insertion-sort.js)
|
||||||
3. [Selection Sort](src/sorting/selection-sort.js)
|
3. [Selection Sort](src/sorting/selection-sort.js)
|
||||||
|
4. [Merge Sort](src/sorting/merge-sort.js)
|
||||||
|
|
||||||
## Strings
|
## Strings
|
||||||
1. [Palindrome](src/strings/palindrome.js)
|
1. [Palindrome](src/strings/palindrome.js)
|
||||||
|
|
|
@ -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));
|
Loading…
Reference in New Issue