Spaces:
Runtime error
Runtime error
| // [[val, ind], [val, ind]...] | |
| type CompFnInd = (a:number[], b:number[]) => number; | |
| export interface SortArray { | |
| arr: number[], | |
| sortIndices: number[], | |
| } | |
| /** | |
| * Copies and sorts an array while keeping track of the indices. Currently only supports sorting max -> min. | |
| * | |
| * @param arr - Array to be copied and sorted | |
| */ | |
| export function sortWithIndices(arr:number[], fn?:CompFnInd): SortArray { | |
| // If fn is not provided, default to sorting by max value | |
| if (!fn) { | |
| fn = function(left, right) { | |
| return left[0] > right[0] ? -1 : 1; | |
| } | |
| } | |
| let out:SortArray = { | |
| arr: [], | |
| sortIndices: [] | |
| }; | |
| let idxTracker: number[][] = [] | |
| for (let i = 0; i < arr.length; i++) { | |
| idxTracker[i] = [arr[i], i]; | |
| } | |
| idxTracker.sort(function(left, right) { | |
| return left[0] > right[0] ? -1 : 1; | |
| }); | |
| for (var j = 0; j < arr.length; j++) { | |
| out.sortIndices.push(idxTracker[j][1]); | |
| out.arr[j] = idxTracker[j][0]; | |
| } | |
| return out; | |
| } |