;An exercise in recursive sorting (use ACAD_STRLSORT, not this) (defun pivot (start finish / ) (if (>= start finish) (setq alldone T) (setq pp_ndx start alldone nil) );if );defun (defun swap (first second / ) (setq temp "NeWiTeM" f_item (nth first newlist) s_item (nth second newlist)) (setq newlist (subst temp s_item newlist)) (setq newlist (subst s_item f_item newlist)) (setq newlist (subst f_item temp newlist)) ) (defun qsort ( first last / ) (if first nil (setq first 0)) (if last nil (setq last (1-(length newlist)))) (pivot first last) (if (not alldone) (progn (setq lt_ndx (1+ pp_ndx) rt_ndx last) (while (not done) (while (and (<=(nth lt_ndx newlist)(nth pp_ndx newlist)) (<= lt_ndx rt_ndx) );and (setq lt_ndx (1+ lt_ndx)) );while (while (>(nth rt_ndx newlist)(nth pp_ndx newlist)) (setq rt_ndx (1- rt_ndx)) );while (if (> rt_ndx lt_ndx) (swap lt_ndx rt_ndx) );if (if (> lt_ndx rt_ndx) (setq done T) );if );while (setq done nil) (swap pp_ndx rt_ndx) (setq pp_ndx rt_ndx) (qsort first (1- rt_ndx)) (qsort (1+ rt_ndx) last) );progn );if );defun (defun pivot (start finish / ) (if (>= start finish) (setq alldone T) (setq pp_ndx start alldone nil) );if );defun (defun swap (first second / ) (setq temp "NeWiTeM" f_item (nth first newlist) s_item (nth second newlist)) (setq newlist (subst temp s_item newlist)) (setq newlist (subst s_item f_item newlist)) (setq newlist (subst f_item temp newlist)) ) (defun qsort ( first last / ) (if first nil (setq first 0)) (if last nil (setq last (1-(length newlist)))) (pivot first last) (if (not alldone) (progn (setq lt_ndx (1+ pp_ndx) rt_ndx last) (while (not done) (while (and (<=(nth lt_ndx newlist)(nth pp_ndx newlist)) (<= lt_ndx rt_ndx) );and (setq lt_ndx (1+ lt_ndx)) );while (while (>(nth rt_ndx newlist)(nth pp_ndx newlist)) (setq rt_ndx (1- rt_ndx)) );while (if (> rt_ndx lt_ndx) (swap lt_ndx rt_ndx) );if (if (> lt_ndx rt_ndx) (setq done T) );if );while (setq done nil) (swap pp_ndx rt_ndx) (setq pp_ndx rt_ndx) (qsort first (1- rt_ndx)) (qsort (1+ rt_ndx) last) );progn );if );defun