/** * */ var Quicksort = function() { this.instructions = []; }; Quicksort.prototype = Object.create(Sorter.prototype); /** * */ Quicksort.prototype.addInstruction = function(operation, left, right, pivot) { this.instructions.push({ operation: operation, left: left, right: right, pivot: pivot }); }; // NOTE adds to an instruction set /** * */ Quicksort.prototype.sort = function(arr, start, end) { if (end - start <= 0) { this.addInstruction('single', start, end, null); return this.visualizer; } var left = start; var right = end; var pivot = Math.floor((right + left) / 2); var pivotval = arr[pivot].value; var tmp; this.addInstruction('init', left, right, pivot); while (left <= right) { while (arr[left].value < pivotval) { left++; this.addInstruction('inc-left', left, right, pivot); } while (arr[right].value > pivotval) { right--; this.addInstruction('dec-right', left, right, pivot); } if (left <= right) { tmp = arr[left]; arr[left] = arr[right]; arr[right] = tmp; this.addInstruction('swap', left, right, pivot); left++; right--; this.addInstruction('swap-inc-dec', left, right, pivot); } } this.sort(arr, start, right); this.sort(arr, left, end); };