From 23244e1d2009d0527580a81c56a380ed1acd05ef Mon Sep 17 00:00:00 2001 From: Subhajit Sahu Date: Sun, 7 May 2023 15:37:27 +0530 Subject: [PATCH] :bug: chore: clean TODO --- TODO | 85 +---------------------------------------------- package-lock.json | 4 +-- package.json | 2 +- src/index.ts | 18 ++++++++-- wiki | 2 +- 5 files changed, 21 insertions(+), 90 deletions(-) diff --git a/TODO b/TODO index 580d8dc22..18100ca5a 100644 --- a/TODO +++ b/TODO @@ -1,15 +1,4 @@ -SORTS, IN PAIR - -Instead of mapFn, provide pair array to define sort mapping. -selectionSort, insertionSort, bubbleSort, mergeSort, (are all stable?) -quickSort, shellSort, radixSort, timSort, heapSort -https://en.wikipedia.org/wiki/Sorting_algorithm -https://www.npmjs.com/package/sort-algorithms-js -https://dl.acm.org/doi/10.5555/1778580.1778601 -https://stackoverflow.com/questions/463105/in-place-radix-sort/474040#474040 - - -MINNTH, MAXNTH, SORTEDSLICE (ARRAYVIEW) +MINNTH, MAXNTH Need only part of sorted array? [bag][nth] ... Selection algorithm: Quickselect @@ -23,75 +12,3 @@ PARSE, OTHERS INDEX -VE - moveWithin - - -OLD SORT ALGORITHMS - -/** - * Arrange values in order! - * @param x an array (updated!) - * @param fc compare function (a, b) - * @param fm map function (v, i, x) - * @param fs swap function (x, i, j) - * @returns x | x[i] ≤ x[j] ∀ i ≤ j - */ -function bubbleSort$(x: T[], fc: CompareFunction | null=null, fm: MapFunction | null=null, fs: SwapFunction | null=null): T[] { - var fc = fc || COMPARE; - var fm = fm || IDENTITY; // TODO: use map function - var fs = fs || swap$; - var X = x.length; - for (var i=0; i 0) fs(x, i, j); - } - return x; -} - - -/** - * Arrange values in order! - * @param x an array (updated!) - * @param fc compare function (a, b) - * @param fm map function (v, i, x) - * @param fs swap function (x, i, j) - * @returns x | x[i] ≤ x[j] ∀ i ≤ j - */ -function selectionSort$(x: T[], fc: CompareFunction | null=null, fm: MapFunction | null=null, fs: SwapFunction | null=null): T[] { - var fc = fc || COMPARE; - var fm = fm || IDENTITY; // TODO: use map function - var fs = fs || swap$; - var X = x.length; - for (var i=0; i 0) l = j; - fs(x, i, l); - } - return x; -} - - -// TODO: Check if this is correct! -/** - * Arrange values in order! - * @param x an array (updated!) - * @param fc compare function (a, b) - * @param fm map function (v, i, x) - * @param fs swap function (x, i, j) - * @returns x | x[i] ≤ x[j] ∀ i ≤ j - */ -function insertionSortOld$(x: T[], fc: CompareFunction | null=null, fm: MapFunction | null=null, fs: SwapFunction | null=null): T[] { - var fc = fc || COMPARE; - var fm = fm || IDENTITY; // TODO: use map function - var fs = fs || swap$; // TODO: use swap function - var X = x.length; - for (var i=X-2; i>=0; --i) { - var xv = x[i], mv = x[i]; - for (var j=i+1; j(x: T[], i: number, I: number, fc: CompareF */ function reverseMinHeapify$(x: T[], i: number, I: number, r: number, fc: CompareFunction, fm: MapFunction, fs: SwapFunction): void { var s = r; // Index of smallest value - var lt = 2*r - I; // Reverse of lt = 2*r+1 - var rt = lt - 1; // Reverse of rt = 2*r+2 + var lt = 2*r - I; // Left child, reverse of lt = 2*r+1 + var rt = lt - 1; // Right child, reverse of rt = 2*r+2 if (lt>=i && fc(fm(x[lt], lt, x), fm(x[s], s, x)) < 0) s = lt; // Left child is smaller? if (rt>=i && fc(fm(x[rt], rt, x), fm(x[s], s, x)) < 0) s = rt; // Right child is smaller? if (s !== r) { // Smallest is not root? @@ -3283,6 +3283,20 @@ function reverseMinHeapify$(x: T[], i: number, I: number, r: number, fc: } +function minHeapify$(x: T[], i: number, I: number, r: number, fc: CompareFunction, fm: MapFunction, fs: SwapFunction): void { + var s = r; // Index of smallest value + // lt = i + 2*(r-i) + 1 = i + 2r - 2i + 1 = + var lt = 2*r - i + 1; // Left child, like lt = 2*r+1 + var rt = lt + 1; // Right child, like rt = 2*r+2 + if (lt