This is a fast quick sort routine.
Author: Ruediger Wilke
/* ------------------------------------------------------------------ */
/* function: quick sort routine */
/* */
/* call: QuickSort first_element, last_element */
/* */
/* returns: nothing */
/* */
/* notes: You must save the elements to sort in the stem "a." */
/* a.0 must contain the number of elements in the stem. */
/* */
/* */
qqsort: procedure expose a.
arg lf, re
if re -lf < 9 then
do lf = lf to re -1
m = lf
do j = lf +1 to re
if a.j << a.m then /* v2.80 */
m = j
end /* j = lf +1 to re */
t = a.m; a.m = a.lf; a.lf = t
end /* lf = lf to re -1 */
else
do
i = lf
j = re
k = (lf + re)%2
t = a.k
do until i > j
do while a.i << t /* v2.80 */
i = i + 1
end /* while a.i << t */
do while a.j >> t /* v2.80 */
j = j - 1
end /* while a.j >> t */
if i <= j then
do
xchg = a.i
a.i = a.j
a.j = xchg
i = i + 1
j = j - 1
end /* if i <= j then */
end /* until i > j */
call qqsort lf, j
call qqsort i, re
end /* else */
return