UNPKG

timsort2

Version:

TimSort sorting revived in TypeScript

2 lines (1 loc) 4.51 kB
"use strict";var B=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var E=(e,n)=>{for(var T in n)B(e,T,{get:n[T],enumerable:!0})},M=(e,n,T,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of S(n))!_.call(e,t)&&t!==T&&B(e,t,{get:()=>n[t],enumerable:!(s=H(n,t))||s.enumerable});return e};var N=e=>M(B({},"__esModule",{value:!0}),e);var j={};E(j,{alphabeticalCompare:()=>R,sort:()=>$});module.exports=N(j);var D=new ArrayBuffer(160),P=new ArrayBuffer(160),C=7,d=new Float32Array([1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9]);function R(e,n){if(e===n)return 0;if((e|0)===e&&(n|0)===n){if(e===0||n===0)return e-n;if(e<0||n<0){if(n>=0)return-1;if(e>=0)return 1;e=-e,n=-n}let t=Math.log10(e)|0,i=Math.log10(n)|0,o=0;return t<i?(e*=d[i-t-1],n/=10,o=-1):t>i&&(n*=d[t-i-1],e/=10,o=1),e===n?o:e-n}let T=`${e}`,s=`${n}`;return T===s?0:T<s?-1:1}function $(e,n=R,T=0,s=e.length){let t=s-T;if(t<2)return e;if(t<32)return I(e,T,s,T+F(e,T,s,n),n),e;let i=e.length,o=0;i=i<120?5:i<1542?10:i<119151?19:40;let u=new Uint32Array(D,0,i),r=new Uint32Array(P,0,i),f=0,b=t;for(;b>=32;)f|=b&1,b>>=1;let A=f+b,m=C,c=new Array(i<512?i>>1:256);do{for(i=F(e,T,s,n),i<A&&(f=t>A?A:t,I(e,T,T+f,T+i,n),i=f),u[o]=T,r[o]=i,o+=1;o>1;){if(f=o-2,f>=1&&r[f-1]<=r[f]+r[f+1]||f>=2&&r[f-2]<=r[f]+r[f-1])r[f-1]<r[f+1]&&f--;else if(r[f]>r[f+1])break;m=O(e,n,c,f,o--,r,u,m)}t-=i,T+=i}while(t!==0);for(;o>1;)f=o-2,f>0&&r[f-1]<r[f+1]&&f--,m=O(e,n,c,f,o--,r,u,m);return e}function I(e,n,T,s,t){s===n&&s++;let i;for(;s<T;s++){let o=e[s],u=n,r=s;for(;u<r;)t(o,e[i=u+r>>1])<0?r=i:u=i+1;switch(i=s-u,i){case 3:e[u+3]=e[u+2];case 2:e[u+2]=e[u+1];case 1:e[u+1]=e[u];break;default:for(;i>0;)e[u+i]=e[u+i-1],i--}e[u]=o}}function U(e,n,T,s,t,i){let o=T+t,u=0,r,f=1,b;if(i(e,n[o])>0){for(r=s-t;f<r&&i(e,n[o+f])>0;)u=f,f=(f<<1)+1;u+=t,f=t+(r+(f-r>>31&f-r))}else{for(r=t+1;f<r&&i(e,n[o-f])<=0;)u=f,f=(f<<1)+1;b=u,u=t-(r+(f-r>>31&f-r)),f=t-b}for(u++;u<f;)i(e,n[T+(b=u+f>>1)])>0?u=b+1:f=b;return f}function L(e,n,T,s,t,i){let o=T+t,u=0,r,f=1,b;if(i(e,n[o])<0){for(r=t+1;f<r&&i(e,n[o-f])<0;)u=f,f=(f<<1)+1;b=u,u=t-(r+(f-r>>31&f-r)),f=t-b}else{for(r=s-t;f<r&&i(e,n[o+f])>=0;)u=f,f=(f<<1)+1;u+=t,f=t+(r+(f-r>>31&f-r))}for(u++;u<f;)i(e,n[T+(b=u+f>>1)])<0?f=b:u=b+1;return f}function F(e,n,T,s){let t=n+1;if(t===T)return 1;if(s(e[t++],e[n])<0){for(;t<T&&s(e[t],e[t-1])<0;)t++;for(t--;n<t;){let i=e[n];e[n++]=e[t],e[t--]=i}t++}else for(;t<T&&s(e[t],e[t-1])>=0;)t++;return t-n}function O(e,n,T,s,t,i,o,u){let r=o[s],f=i[s],b=o[s+1],A=i[s+1];i[s]=f+A,s===t-3&&(o[s+1]=o[s+2],i[s+1]=i[s+2]);let m=L(e[b],e,r,f,0,n);return r+=m,f-=m,f===0||(A=U(e[r+f-1],e,b,A,A-1,n),A===0)?u:f<=A?W(e,n,T,r,f,b,A,u):z(e,n,T,r,f,b,A,u)}function z(e,n,T,s,t,i,o,u){let r=0;for(r;r<o;r++)T[r]=e[i+r];let f=s+t-1,b=o-1,A=i+o-1,m,c;if(e[A--]=e[f--],--t===0){for(m=A-(o-1),r=0;r<o;r++)e[m+r]=T[r];return u}if(o===1){for(A-=t,f-=t,c=A+1,m=f+1,r=t-1;r>=0;r--)e[c+r]=e[m+r];return e[A]=T[b],u}for(;;){let k=0,w=0,x=!1;do if(n(T[b],e[f])<0){if(e[A--]=e[f--],k++,w=0,--t===0){x=!0;break}}else if(e[A--]=T[b--],w++,k=0,--o===1){x=!0;break}while((k|w)<u);if(x)break;do{if(k=t-L(T[b],e,s,t,t-1,n),k!==0){for(A-=k,f-=k,t-=k,c=A+1,m=f+1,r=k-1;r>=0;r--)e[c+r]=e[m+r];if(t===0){x=!0;break}}if(e[A--]=T[b--],--o===1){x=!0;break}if(w=o-U(e[f],T,0,o,o-1,n),w!==0){for(A-=w,b-=w,o-=w,c=A+1,m=b+1,r=0;r<w;r++)e[c+r]=T[m+r];if(o<=1){x=!0;break}}if(e[A--]=e[f--],--t===0){x=!0;break}u--}while(k>=C||w>=C);if(x)break;u<0&&(u=0),u+=2}if(u<1&&(u=1),o===1){for(A-=t,f-=t,c=A+1,m=f+1,r=t-1;r>=0;r--)e[c+r]=e[m+r];e[A]=T[b]}else{if(o===0)return u;for(m=A-(o-1),r=0;r<o;r++)e[m+r]=T[r]}return u}function W(e,n,T,s,t,i,o,u){let r=0,f=0;for(;r<t;r++)T[r]=e[s+r];if(e[s++]=e[i++],--o===0){for(r=0;r<t;r++)e[s+r]=T[f+r];return u}if(t===1){for(r=0;r<o;r++)e[s+r]=e[i+r];return e[s+o]=T[f],u}for(;;){let b=0,A=0,m=!1;do if(n(e[i],T[f])<0){if(e[s++]=e[i++],A++,b=0,--o===0){m=!0;break}}else if(e[s++]=T[f++],b++,A=0,--t===1){m=!0;break}while((b|A)<u);if(m)break;do{if(b=L(e[i],T,f,t,0,n),b!==0){for(r=0;r<b;r++)e[s+r]=T[f+r];if(s+=b,f+=b,t-=b,t<=1){m=!0;break}}if(e[s++]=e[i++],--o===0){m=!0;break}if(A=U(T[f],e,i,o,0,n),A!==0){for(r=0;r<A;r++)e[s+r]=e[i+r];if(s+=A,i+=A,o-=A,o===0){m=!0;break}}if(e[s++]=T[f++],--t===1){m=!0;break}u--}while(b>=C||A>=C);if(m)break;u<0&&(u=0),u+=2}if(u<1&&(u=1),t===1){for(r=0;r<o;r++)e[s+r]=e[i+r];e[s+o]=T[f]}else{if(t===0)return u;for(r=0;r<t;r++)e[s+r]=T[f+r]}return u}0&&(module.exports={alphabeticalCompare,sort});