用Clojure写一个冒泡排序
时间: 2023-12-31 21:45:35 浏览: 95
以下是用Clojure编写的冒泡排序代码:
```clojure
(defn bubble-sort [array]
(loop [arr array
n (count array)
swapped true]
(if (not swapped)
arr
(let [new-arr (vec (take n arr))
swapped? false]
(doseq [i (range 0 (dec n))
:let [j (inc i)]]
(if (> (nth new-arr i) (nth new-arr j))
(do
(assoc! new-arr i (nth new-arr j))
(assoc! new-arr j (nth new-arr i))
(recur new-arr n true)
(def swapped? true))))
(recur new-arr (dec n) swapped?)))))
;; 示例用法
(bubble-sort [3 1 4 1 5 9 2 6 5 3])
;; 输出:[1 1 2 3 3 4 5 5 6 9]
```
该函数使用了循环和条件语句来实现冒泡排序。它首先初始化一个布尔值“swapped”,用于检查是否需要继续排序。然后使用一个无限循环来迭代排序过程,同时跟踪数组的大小“n”和“swapped”的值。
在每次迭代中,它会创建一个新的数组副本,并使用“doseq”循环遍历该数组,比较相邻的元素并交换它们的位置(如果必要)。如果有任何交换发生,则将“swapped”设置为true,并继续进行排序。
最后,当没有交换发生时,该函数将返回已排序的数组。
阅读全文