UNPKG

quoslibero

Version:

FusionCharts JavaScript charting framework

1 lines 5.91 kB
function binaryInsertionSort(a,b,c,d,e){for(c=c||0,d=d||a.length,e=e||c+1,b||(b=(c,a)=>c-a),c===e&&++e;e<d;++e){let d=c,f=e,g=a[f];do{let c=d+(f-d>>1);0>b(g,a[c])?f=c:d=c+1}while(d<f);for(let b=e;b>d;--b)a[b]=a[b-1];a[d]=g}}function mergeSort(a,b){if(a.constructor!==Array)throw new TypeError('Merge sort can only be applied on Array.');if(1===a.length)return a;b||(b=(c,a)=>c-a);let c=Math.floor(a.length/2),d=a.slice(0,c),e=a.slice(c);return merge(mergeSort(d,b),mergeSort(e,b),b)}function merge(a,b,c){let d=[],e=0,f=0;for(;e<a.length&&f<b.length;)0>=c(a[e],b[f])?(d.push(a[e]),e++):(d.push(b[f]),f++);return d.concat(a.slice(e)).concat(b.slice(f))}const MINRUN_LENGTH=64,MIN_GALLOP_LENGTH=7,DEFAULT_TMP_STORAGE_LEN=256,MAX_STACK_SIZE=40;function reverseSlice(a,b,c){for(--c;b<c;){let d=a[b];a[b++]=a[c],a[c--]=d}}function countRun(a,b,c,d){let e=c+1;if(e===d)return 1;if(0>b(a[e++],a[c])){for(;e<d&&0>b(a[e],a[e-1]);)e++;reverseSlice(a,c,e)}else for(;e<d&&0<=b(a[e],a[e-1]);)e++;return e-c}function mergeComputeMinrun(a){let b=0;for(;a>=MINRUN_LENGTH;)b|=1&a,a>>=1;return a+b}function gallopLeft(a,b,c,d,e,f){let g,h,i=0,j=0,k=1;if(0<f(a,b[c+e])){for(j=d-e;k<j&&0<f(a,b[c+e+k]);)i=k,k=(k<<1)+1,0>=k&&(k=j);k>j&&(k=j),i+=e,k+=e}else{for(j=e+1;k<j&&0>=f(a,b[c+e-k]);)i=k,k=(k<<1)+1,0>=k&&(k=j);k>j&&(k=j),g=i,i=e-k,k=e-g}for(i++;i<k;)h=i+(k-i>>>1),0<f(a,b[c+h])?i=h+1:k=h;return k}function gallopRight(a,b,c,d,e,f){let g,h,i=0,j=0,k=1;if(0>f(a,b[c+e])){for(j=e+1;k<j&&0>f(a,b[c+e-k]);)i=k,k=(k<<1)+1,0>=k&&(k=j);k>j&&(k=j),g=i,i=e-k,k=e-g}else{for(j=d-e;k<j&&0<=f(a,b[c+e+k]);)i=k,k=(k<<1)+1,0>=k&&(k=j);k>j&&(k=j),i+=e,k+=e}for(i++;i<k;)h=i+(k-i>>>1),0>f(a,b[c+h])?k=h:i=h+1;return k}class MergeState{constructor(a,b){this.arr=a,this.comparer=b,this.length=a.length,this.tmpStorageLen=this.length<512?this.length>>>1:DEFAULT_TMP_STORAGE_LEN,this.tmp=Array(this.tmpStorageLen),this.runBaseArr=Array(MAX_STACK_SIZE),this.runLenArr=Array(MAX_STACK_SIZE),this.minGallop=MIN_GALLOP_LENGTH,this.stackSize=0}pushRun(a,b){this.runBaseArr[this.stackSize]=a,this.runLenArr[this.stackSize]=b,this.stackSize++}mergeCollapse(){for(let a;1<this.stackSize;){if(a=this.stackSize-2,1<=a&&this.runLenArr[a-1]<=this.runLenArr[a]+this.runLenArr[a+1]||2<=a&&this.runLenArr[a-2]<=this.runLenArr[a]+this.runLenArr[a-1])this.runLenArr[a-1]<this.runLenArr[a+1]&&a--;else if(this.runLenArr[a]>this.runLenArr[a+1])break;this.mergeAt(a)}}mergeForceCollapse(){for(let a;1<this.stackSize;)a=this.stackSize-2,0<a&&this.runLenArr[a-1]<this.runLenArr[a+1]&&a--,this.mergeAt(a)}mergeAt(a){let b,c=this.comparer,d=this.arr,e=this.runBaseArr[a],f=this.runLenArr[a],g=this.runBaseArr[a+1],h=this.runLenArr[a+1];(this.runLenArr[a]=f+h,a===this.stackSize-3&&(this.runBaseArr[a+1]=this.runBaseArr[a+2],this.runLenArr[a+1]=this.runLenArr[a+2]),this.stackSize--,b=gallopRight(d[g],d,e,f,0,c),e+=b,f-=b,0!==f)&&(h=gallopLeft(d[e+f-1],d,g,h,h-1,c),0===h||(f<=h?this.mergeLo(e,f,g,h):this.mergeHi(e,f,g,h)))}mergeLo(a,b,c,d){let e,f,g,h,j=0,k=0,l=c,m=a;for(j=0;j<b;j++)this.tmp[j]=this.arr[a+j];if(this.arr[m++]=this.arr[l++],0==--d){for(j=0;j<b;j++)this.arr[m+j]=this.tmp[k+j];return}if(1===b){for(j=0;j<d;j++)this.arr[m+j]=this.arr[l+j];return void(this.arr[m+d]=this.tmp[k])}for(e=this.minGallop;;){f=0,g=0,h=!1;do if(0>this.comparer(this.arr[l],this.tmp[k])){if(this.arr[m++]=this.arr[l++],g++,f=0,0==--d){h=!0;break}}else if(this.arr[m++]=this.tmp[k++],f++,g=0,1==--b){h=!0;break}while((f|g)<e);if(h)break;do{if(f=gallopRight(this.arr[l],this.tmp,k,b,0,this.comparer),0!==f){for(j=0;j<f;j++)this.arr[m+j]=this.tmp[k+j];if(m+=f,k+=f,b-=f,1>=b){h=!0;break}}if(this.arr[m++]=this.arr[l++],0==--d){h=!0;break}if(g=gallopLeft(this.tmp[k],this.arr,l,d,0,this.comparer),0!==g){for(j=0;j<g;j++)this.arr[m+j]=this.arr[l+j];if(m+=g,l+=g,d-=g,0===d){h=!0;break}}if(this.arr[m++]=this.tmp[k++],1==--b){h=!0;break}e--}while(f>=MIN_GALLOP_LENGTH||g>=MIN_GALLOP_LENGTH);if(h)break;0>e&&(e=0),e+=2}if(this.minGallop=e,1>e&&(this.minGallop=1),1===b){for(j=0;j<d;j++)this.arr[m+j]=this.arr[l+j];this.arr[m+d]=this.tmp[k]}else for(j=0;j<b;j++)this.arr[m+j]=this.tmp[k+j]}mergeHi(a,b,c,d){let e,f,g,h,j=0,k=a+b-1,l=d-1,m=c+d-1,n=0,o=0;for(j=0;j<d;j++)this.tmp[j]=this.arr[c+j];if(this.arr[m--]=this.arr[k--],0==--b){for(n=m-(d-1),j=0;j<d;j++)this.arr[n+j]=this.tmp[j];return}if(1===d){for(m-=b,k-=b,o=m+1,n=k+1,j=b-1;0<=j;j--)this.arr[o+j]=this.arr[n+j];return void(this.arr[m]=this.tmp[l])}for(e=this.minGallop;;){f=0,g=0,h=!1;do if(0>this.comparer(this.tmp[l],this.arr[k])){if(this.arr[m--]=this.arr[k--],f++,g=0,0==--b){h=!0;break}}else if(this.arr[m--]=this.tmp[l--],g++,f=0,1==--d){h=!0;break}while((f|g)<e);if(h)break;do{if(f=b-gallopRight(this.tmp[l],this.arr,a,b,b-1,this.comparer),0!==f){for(m-=f,k-=f,b-=f,o=m+1,n=k+1,j=f-1;0<=j;j--)this.arr[o+j]=this.arr[n+j];if(0===b){h=!0;break}}if(this.arr[m--]=this.tmp[l--],1==--d){h=!0;break}if(g=d-gallopLeft(this.arr[k],this.tmp,0,d,d-1,this.comparer),0!==g){for(m-=g,l-=g,d-=g,o=m+1,n=l+1,j=0;j<g;j++)this.arr[o+j]=this.tmp[n+j];if(1>=d){h=!0;break}}if(this.arr[m--]=this.arr[k--],0==--b){h=!0;break}e--}while(f>=MIN_GALLOP_LENGTH||g>=MIN_GALLOP_LENGTH);if(h)break;0>e&&(e=0),e+=2}if(this.minGallop=e,1>e&&(this.minGallop=1),1===d){for(m-=b,k-=b,o=m+1,n=k+1,j=b-1;0<=j;j--)this.arr[o+j]=this.arr[n+j];this.arr[m]=this.tmp[l]}else for(n=m-(d-1),j=0;j<d;j++)this.arr[n+j]=this.tmp[j]}}function timSort(a,b,c,d){if(a.constructor!==Array)throw new TypeError('Sorting can only be applied on arrays.');c=c||0,d=d||a.length,b||(b=(c,a)=>c-a);let e,f,g,h,i=d-c;if(!(2>i)){if(i<MINRUN_LENGTH)return e=countRun(a,b,c,d),void binaryInsertionSort(a,b,c,d,c+e);f=mergeComputeMinrun(i),g=new MergeState(a,b);do e=countRun(a,b,c,c+i),e<f&&(h=i<=f?i:f,binaryInsertionSort(a,b,c,c+h,c+e),e=h),g.pushRun(c,e),g.mergeCollapse(),i-=e,c+=e;while(0!==i);g.mergeForceCollapse()}}export default timSort;export{binaryInsertionSort,mergeSort};