( defun vsort ( lst & key ( order 'a) )
( cond ( ( null lst) nil )
( t ( let * ( ( z ( if ( eq order 'a) ( apply 'min lst) ( apply 'max lst) ) )
( rest ( removef z lst) ) )
( cons z ( vsort rest : order order) ) ) ) ) )
==> vsort
( vsort '( 1 2 3 1 2 3 ) : order 'a)
==> ( 1 1 2 2 3 3 )
( vsort '( 1 2 3 1 2 3 ) : order 'd)
==> ( 3 3 2 2 1 1 )
KGRlZnVuIHZzb3J0IChsc3QgJmtleSAob3JkZXIgJ2EpKQogIChjb25kICgobnVsbCBsc3QpIG5pbCkKICAgICAgICAodCAobGV0KiAoICh6IChpZiAoZXEgb3JkZXIgJ2EpIChhcHBseSAnbWluIGxzdCkgKGFwcGx5ICdtYXggbHN0KSkpCiAgICAgICAgICAgICAgICAgICAocmVzdCAocmVtb3ZlZiAgeiBsc3QpKSkKICAgICAgICAgICAgICAgICAoY29ucyB6ICh2c29ydCByZXN0IDpvcmRlciBvcmRlcikpKSkpKQogCj09PiB2c29ydAogCih2c29ydCAnKDEgMiAzIDEgMiAzKSA6b3JkZXIgJ2EpCiAKPT0+ICgxIDEgMiAyIDMgMykKIAoodnNvcnQgJygxIDIgMyAxIDIgMykgOm9yZGVyICdkKQogCj09PiAoMyAzIDIgMiAxIDEp