// quicksort

enum 
  20 N

to inita | i =
  for i 0 N-1
    a[i] = N - i

to show | i =
  for i 0 N-1
    print a[i] space
  nl

to swap i j | t =
  t = a[i]
  a[i] = a[j]
  a[j] = t

to partition p r | x i j flag =
  x = a[p]
  i = p - 1
  j = r + 1
  flag = 1
  while flag
    j = j - 1
    while a[j] > x
      j = j - 1
    i = i + 1
    while a[i] < x
      i = i + 1
    if (i < j) swap i j else flag = 0
  j

to quicksort p r | q =
  if p < r
    q = partition p r
    quicksort p q
    quicksort q+1 r

to main =
  a = array N
  inita show quicksort 0 (N-1) show
//  inita quicksort 0 (N-1)

main

