Spaces:
Sleeping
Sleeping
File size: 1,552 Bytes
8d955a0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | 'use strict'
module.exports = reorder
function reorder(arr, index, stride) {
var n = index.length
if (!stride) {
stride = Math.floor(arr.length / index.length);
}
if (arr.length !== n * stride) {
throw Error('Bad length of index array')
}
if (stride === 1) {
reorderSimple()
}
else {
reorderStride(stride)
}
function reorderSimple () {
for (var start = 0; start < n; start++) {
var currId, pickId = index[start]
if (start === pickId) continue
while (pickId !== start) {
currId = pickId
pickId = index[currId]
var v = arr[pickId]
arr[pickId] = arr[currId]
arr[currId] = v
index[currId] = currId
}
}
}
function reorderStride (stride) {
for (var start = 0; start < n; start++) {
var currId, pickId = index[start]
if (start === pickId) continue
while (pickId !== start) {
currId = pickId
pickId = index[currId]
for (var j = 0; j < stride; j++) {
var value = arr[pickId * stride + j];
arr[pickId * stride + j] = arr[currId * stride + j];
arr[currId * stride + j] = value;
}
index[currId] = currId
}
}
}
return arr
}
|