Jump to content
Sign in to follow this  


Recommended Posts

for a musical research project where i work with the sorting processes of different sorting algorithms (bubble-sort, heap-sort ...), i have to program such algorithms myself. the ide is that not only the end result of the algorithm is visible but also the constant changes (the mechansim). here the first: bubble-sort.

very simple and inelegant programmed - but the thing i need to have  :-)





have a look to different sorting algorithms:






;;; bubble-sort -> with all GEN's to see the process of sorting
;;; end-test "until (equal (sort-asc alist) list)" very uncommon (and strange), 
;;; but most simple-stupid test to check the end, only okay for this kind of idea ("watching the process not the endresult")

(defun bubble-sort (seq)
  (let ((alist))
      (setf alist (cond ((pitchp (car seq))
                         (pitch-to-midi seq))
                        ((lengthp (car seq))
                         (omn :length seq))
                        (t seq)))
      (setf alist (loop until (equal (sort-asc alist) list) 
                    with list = alist
                    append (loop 
                             for i from 0 to (- (length list) 2)
                             for j from 1 to (- (length list) 1)
                             when (> (nth i list) (nth j list))
                             collect (setf list (position-swap (list j i) list))
                             else do (setf list list))))
      (cond ((pitchp (car seq))
             (midi-to-pitch alist))
            (t alist)))))

(bubble-sort (rnd-order '(c5 e4 g3 b7)))
(bubble-sort (rnd-order '(t s e q h w)))
(bubble-sort '(1 6 334 2 6 4 111))


Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this