REBOL [ Title: "Heapsort" Author: "Aldo Calpini" Date: 03-Jul-2001 File: %heapsort.r ] IM: 139968 IA: 3877 IC: 29573 LAST: 42 gen_random: func [N] [ LAST: (LAST * IA + IC) // IM return N * LAST / IM ] heapsort: func [ n ra /local rra [decimal!] l [integer!] ir [integer!] j [integer!] k [integer!] ] [ l: n / 2 + 1 ir: n while [1] [ either l > 1 [ l: l - 1 rra: pick ra l ] [ rra: pick ra ir v: pick ra 1 change at ra ir v ir: ir - 1 if [ir = 1] [ change at ra 1 rra return ] ] i: l j: l * 2 while [ j <= ir ] [ if j < ir [ v1: pick ra j v2: pick ra (j + 1) if v1 < v2 [ j: j + 1 ] ] v: pick ra j either rra < v [ change at ra i v i: j j: j + i ] [ j: ir + 1 ] ] change at ra i rra ] ] NUM: to-integer to-string system/script/args NUM: either NUM < 1 [ 1 ] [ NUM ] ary: copy [] for i 1 NUM 1 [ insert tail ary gen_random 1 ] heapsort NUM ary probe ary v: pick ary NUM print v write %output.rebol v