From a39f92f97c8f5947c975c3a44933a94fb81d3eba Mon Sep 17 00:00:00 2001 From: Wakidur Rahaman Date: Sun, 18 Sep 2022 14:11:23 +0900 Subject: [PATCH] merge sort implement --- javascript-today-magazine/merge-sort.js | 35 +++++++++++++++++++++++++ javascript-today-magazine/merge-sort.ts | 30 +++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 javascript-today-magazine/merge-sort.js create mode 100644 javascript-today-magazine/merge-sort.ts 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));