Skip to content

Commit

Permalink
🐛 chore: clean TODO
Browse files Browse the repository at this point in the history
  • Loading branch information
wolfram77 committed May 7, 2023
1 parent f552871 commit 23244e1
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 90 deletions.
85 changes: 1 addition & 84 deletions TODO
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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$<T, U=T>(x: T[], fc: CompareFunction<T|U> | null=null, fm: MapFunction<T, T|U> | null=null, fs: SwapFunction<T> | 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<X-1; ++i) {
for (var j=i+1; j<X; ++j)
if (fc(x[i], x[j]) > 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$<T, U=T>(x: T[], fc: CompareFunction<T|U> | null=null, fm: MapFunction<T, T|U> | null=null, fs: SwapFunction<T> | 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<X-1; ++i) {
var l = i;
for (var j=i+1; j<X; ++j)
if (fc(x[l], x[j]) > 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$<T, U=T>(x: T[], fc: CompareFunction<T|U> | null=null, fm: MapFunction<T, T|U> | null=null, fs: SwapFunction<T> | 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; j++) {
if (fc(mv, x[j]) <= 0) break;
x[j-1] = x[j];
}
x[j-1] = xv;
}
return x;
}
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "extra-array",
"version": "4.0.1",
"version": "4.0.2",
"description": "An array is a collection of values, stored contiguously.",
"main": "index.js",
"module": "index.mjs",
Expand Down
18 changes: 16 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3272,8 +3272,8 @@ function buildReverseMinHeap$<T, U=T>(x: T[], i: number, I: number, fc: CompareF
*/
function reverseMinHeapify$<T, U=T>(x: T[], i: number, I: number, r: number, fc: CompareFunction<T|U>, fm: MapFunction<T, T|U>, fs: SwapFunction<T>): 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?
Expand All @@ -3283,6 +3283,20 @@ function reverseMinHeapify$<T, U=T>(x: T[], i: number, I: number, r: number, fc:
}


function minHeapify$<T, U=T>(x: T[], i: number, I: number, r: number, fc: CompareFunction<T|U>, fm: MapFunction<T, T|U>, fs: SwapFunction<T>): 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<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?
fs(x, s, r); // Swap root with smallest
minHeapify$(x, i, I, s, fc, fm, fs); // Rebuild heap
}
}


/**
* Partially arrange values in order!
* @param x an array (updated!)
Expand Down
2 changes: 1 addition & 1 deletion wiki
Submodule wiki updated from 1706a1 to a613a2

0 comments on commit 23244e1

Please sign in to comment.