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; | |
} |