// sorts array in place and returns an array of actions function shellsort(arr) { var N = arr.length, h = Math.floor(N/3) + 1, actions = []; actions.push({type: "parameter", val: h}) while(h >= 1){ for(var i = h; i < N; i++) { for(var j = i; j >= h && arr[j] < arr[j-h]; j -= h) { swap(arr, j, j-h); actions.push({type: "swap", i: j, j: j-h}); } } h = Math.floor(h/3); actions.push({type: "parameter", val: h}); } return actions; } function swap(arr, i, j) { var t = arr[i]; arr[i] = arr[j]; arr[j] = t; } // Node or browser? if (typeof window === 'undefined') { module.exports = shellsort; } else { window.shellsort = shellsort; }