diff --git a/javascript-today-magazine/merge-sort.js b/javascript-today-magazine/merge-sort.js new file mode 100644 index 0000000..6c70408 --- /dev/null +++ b/javascript-today-magazine/merge-sort.js @@ -0,0 +1,35 @@ +/** + * Merge sort + */ +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +function mergeSort(array) { + if (array.length === 1) { + return array; + } + var center = Math.floor(array.length / 2); + var left = array.slice(0, center); + var right = array.slice(center); + return merge(mergeSort(left), mergeSort(right)); +} +function merge(left, right) { + var results = []; + while (left.length && right.length) { + if (left[0] < right[0]) { + results.push(left.shift()); + } + else { + results.push(right.shift()); + } + } + return __spreadArray(__spreadArray(__spreadArray([], results, true), left, true), right, true); +} +var mergeArray = [3, 4, 6, 9, 3, 1]; +console.log(mergeSort(mergeArray)); diff --git a/javascript-today-magazine/merge-sort.ts b/javascript-today-magazine/merge-sort.ts new file mode 100644 index 0000000..d6c8663 --- /dev/null +++ b/javascript-today-magazine/merge-sort.ts @@ -0,0 +1,30 @@ +/** + * Merge sort + */ + +type props = number[]; + +function mergeSort(array: props): (number| undefined)[] | any { + if (array.length === 1) { + return array; + } + const center: number = Math.floor(array.length / 2); + const left: number[] = array.slice(0, center); + const right: number[] = array.slice(center); + return merge(mergeSort(left), mergeSort(right)); +} + +function merge(left: number[], right: number[]) { + const results: (number| undefined)[] = []; + while (left.length && right.length) { + if (left[0] < right[0]) { + results.push(left.shift()); + } else { + results.push(right.shift()); + } + } + return [...results, ...left, ...right]; +} + +const mergeArray = [3, 4, 6, 9, 3, 1]; +console.log(mergeSort(mergeArray));