首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >字母的气泡排序

字母的气泡排序
EN

Stack Overflow用户
提问于 2018-02-26 20:18:48
回答 1查看 187关注 0票数 1

我想开发一个气泡排序功能,重新排序字母到正确的顺序字母。

到目前为止这是我的代码

代码语言:javascript
运行
复制
(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)行上的=。这使得它需要一个数字而不是一个字母。

不管怎么说,我可以修改这段代码,让它对字母有效吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-26 20:24:05

您可以使用compare函数使比较更加通用:

代码语言:javascript
运行
复制
(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]

您还可以考虑允许自定义比较器的可选参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48996433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档