我想开发一个气泡排序功能,重新排序字母到正确的顺序字母。
到目前为止这是我的代码
(defn bubble [ys x]
(if-let [y (peek ys)]
(if (> y x)
(conj (pop ys) x y)
(conj ys x))
[x]))
(defn bubble-sort [xs]
(let [ys (reduce bubble [] xs)]
(if (= xs ys)
xs
(recur ys))))
我认为问题是(if (> y x)
行上的>和(if (= xs ys)
行上的=。这使得它需要一个数字而不是一个字母。
不管怎么说,我可以修改这段代码,让它对字母有效吗?
发布于 2018-02-26 20:24:05
您可以使用compare
函数使比较更加通用:
(defn bubble [ys x]
(if-let [y (peek ys)]
(if (neg? (compare x y))
(conj (pop ys) x y)
(conj ys x))
[x]))
(defn bubble-sort [xs]
(let [ys (reduce bubble [] xs)]
(if (= xs ys)
xs
(recur ys))))
(bubble-sort [\b \a \c \z \h])
=> [\a \b \c \h \z]
您还可以考虑允许自定义比较器的可选参数。
https://stackoverflow.com/questions/48996433
复制相似问题