(defun bubble-sort (vector) (loop for swapped = nil do (loop for i from 0 below (1- (length vector)) when (> (aref vector i) (aref vector (1+ i))) do (rotatef (aref vector i) (aref vector (1+ i))) (setf swapped t)) unless swapped return vector))
تفسیر:
این تابع که در بالا تعریف و بدنهاش را میبینید یک وکتور را به عنوان تنها ورودی گرفته و با الگوریتم مرتبسازی حبابی آنرا مرتب کرده برمیگرداند.حلقه بیرونی حلقه داخلی رو تا زمانی که وکتور مرتب شود تکرار میکند.حلقه داخلی وکتور را پیمابش کرده و هرجا عنصری دید که از عنصر بعدیاش بزرگتر است، جای آن دو عنصر را عوض میکند.زمانی که بعد از یک پیمایش یعنی پس از یک دور اجرای حلقه داخلی متغیر swapped مقدار nil باقی بماند، حلقه بیرونی متوجه مرتب شدن وکتور شده و وکتور را برمیگرداند. برای اطلاعات بیشتر مطلب آموزش الگوریتم مرتبسازی حبابی را ببینید.