UNPKG

@clarketm/superquicksort

Version:
7 lines • 1.83 kB
/** * Copyright (c) 2018, Travis Clarke * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ !function(r,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(r.QuickSort={})}(this,function(r){"use strict";function t(r,t){return r-t}function e(r){return function(t,e){return r(t,e)<0}}function n(r,t,e){if(t!==e){var n=[r[e],r[t]];r[t]=n[0],r[e]=n[1]}}function o(r,t){return r=Math.ceil(r),t=Math.floor(t),Math.floor(Math.random()*(t-r+1))+r}function i(r){function n(r){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:r.length-1;if(t<e){var o=void 0;switch(d){case f.LOMUTO:o=a(r,t,e,h,s),n(r,t,o-1);break;case f.HOARE:default:o=u(r,t,e,h,s),n(r,t,o)}n(r,o+1,e)}return r}var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t;if(!(this instanceof Array||r instanceof Array))throw Error("Array type is required");var i=this instanceof Array?this:r.slice(0),s=e(o),d=f.HOARE,h=c.RANDOM;return n(i)}function a(r,t,e,o,i){switch(o){case c.LOW:return function(r,t,e){for(var o=t,a=t+1,u=t+1;u<=e;u++)i(r[u],r[o])&&(n(r,a,u),a++);return n(r,a-1,t),a-1}(r,t,e);case c.HIGH:default:return function(r,t,e){for(var o=e,a=t-1,u=t;u<e;u++)i(r[u],r[o])&&(a++,n(r,a,u));return n(r,a+1,e),a+1}(r,t,e)}}function u(r,t,e,i,a){var u=void 0;switch(i){case c.LOW:u=t;break;case c.RANDOM:n(r,o(t,e),t),u=t;break;case c.MID:default:n(r,Math.trunc((t+e)/2),t),u=t}for(var f=t-1,s=e+1;;){do{f++}while(a(r[f],r[u]));do{s--}while(a(r[u],r[s]));if(f>=s)return s;n(r,f,s)}}var f={LOMUTO:"lomuto",HOARE:"hoare"},c={LOW:"low",HIGH:"high",MID:"mid",RANDOM:"rand"};r.quickSort=i,Object.defineProperty(r,"__esModule",{value:!0})});