tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

sorted.js (936B)


      1 function comparer(a, b) {
      2  const ma = /.(\d+)\W*$/.exec(a);
      3  const mb = /.(\d+)\W*$/.exec(b);
      4  if (ma == null || mb == null || ma[1] == mb[1]) {
      5    return a < b ? -1 : a > b ? 1 : 0;
      6  } else {
      7    const na = +ma[1],
      8      nb = +mb[1];
      9    return na < nb ? -1 : na > nb ? 1 : 0;
     10  }
     11 }
     12 
     13 function binaryLookup(ar, i, comparer) {
     14  if (ar.length == 0) {
     15    return { found: false, index: 0 };
     16  }
     17  let l = 0,
     18    r = ar.length - 1;
     19  while (l < r) {
     20    const mid = Math.floor((l + r) / 2);
     21    if (comparer(ar[mid], i) < 0) {
     22      l = mid + 1;
     23    } else {
     24      r = mid;
     25    }
     26  }
     27  const result = comparer(ar[l], i);
     28  if (result === 0) {
     29    return { found: true, index: l };
     30  }
     31  return {
     32    found: false,
     33    index: result < 0 ? l + 1 : l
     34  };
     35 }
     36 
     37 export function fancySort(input) {
     38  return input.reduce((ar, i) => {
     39    const { index } = binaryLookup(ar, i, comparer);
     40    ar.splice(index, 0, i);
     41    return ar;
     42  }, []);
     43 }