/** * */ var Sorter = function() {}; // NOTE fisher-yates, http://bost.ocks.org/mike/algorithms/ /** * Returns copy of an array shuffled using Fisher-Yates. */ Sorter.prototype.shuffle = function(arr) { var result = Object.create(arr); var n = result.length, t, i; while (n) { i = Math.random() * n-- | 0; // 0 ≤ i < n t = result[n]; result[n] = result[i]; result[i] = t; } return result; }; /** * */ Sorter.prototype.generate = function(n) { var arr = []; var v; for (var i = 0; i < n; i++) { v = Math.floor(i * 255 / n); arr.push({ value: v, fill: `rgb(0, 0, ${v})` }); }; return arr; }; /** * */ Sorter.prototype.swap = function(arr, i, j) { // console.info(`swapping ${arr[i].value} and ${arr[j].value}`) var tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; }; /** * */ Sorter.prototype.sort = function(instruction) { throw new Error('Sorter.sort() method override required.'); }; /** * */ Sorter.prototype.addInstruction = function(instruction) { throw new Error('Sorter.addInstruction() method override required.'); };