aboutsummaryrefslogtreecommitdiff
path: root/elymas/lib/sort.ey
blob: 6692cf2a7bb6af32776f86aacfc482f3c68dcd11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{ /cmp deff _ /a deff dom /d deff
  { ==e ==s
    s e eq { [ s d ] } {
      s e add 2 div ==m
      s       m mergeSort =*x 0 ==i
      m 1 add e mergeSort =*y 0 ==j
      { i _ x -01 1 add =i } ==l
      { j _ y -01 1 add =j } ==r
      [
        { i |x len lt j |y len lt and } {
          i x a j y a cmp l r ? *
        } loop
        { i |x len lt } l loop
        { j |y len lt } r loop
      ]
    } ? *
  } /mergeSort deffst
  |a len {
    0 |d len 1 sub mergeSort
  } { [ ] } ? *
} /order deffd

{ _ |lt order -01 { * }_ [ 0 ] [ 0 ] '' * } /sort deffd

# vim: syn=elymas