| 101954 | sortLinked(p); |
| 101955 | } |
| 101956 | function sortLinked(list) { |
| 101957 | let e; |
| 101958 | let i; |
| 101959 | let inSize = 1; |
| 101960 | let numMerges; |
| 101961 | let p; |
| 101962 | let pSize; |
| 101963 | let q; |
| 101964 | let qSize; |
| 101965 | let tail; |
| 101966 | do { |
| 101967 | p = list; |
| 101968 | list = null; |
| 101969 | tail = null; |
| 101970 | numMerges = 0; |
| 101971 | while(p){ |
| 101972 | numMerges++; |
| 101973 | q = p; |
| 101974 | pSize = 0; |
| 101975 | for(i = 0; i < inSize; i++){ |
| 101976 | pSize++; |
| 101977 | q = q.nextZ; |
| 101978 | if (!q) break; |
| 101979 | } |
| 101980 | qSize = inSize; |
| 101981 | while(pSize > 0 || qSize > 0 && q){ |
| 101982 | if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) { |
| 101983 | e = p; |
| 101984 | p = p.nextZ; |
| 101985 | pSize--; |
| 101986 | } else { |
| 101987 | e = q; |
| 101988 | q = q.nextZ; |
| 101989 | qSize--; |
| 101990 | } |
| 101991 | if (tail) tail.nextZ = e; |
| 101992 | else list = e; |
| 101993 | e.prevZ = tail; |
| 101994 | tail = e; |
| 101995 | } |
| 101996 | p = q; |
| 101997 | } |
| 101998 | tail.nextZ = null; |
| 101999 | inSize *= 2; |
| 102000 | }while (numMerges > 1); |
| 102001 | return list; |
| 102002 | } |
| 102003 | function zOrder(x, y, minX, minY, invSize) { |
| 102004 | x = 32767 * (x - minX) * invSize; |
| 102005 | y = 32767 * (y - minY) * invSize; |