首页 > 解决方案 > 尝试快速排序列表并将值返回给新变量

问题描述

我正在尝试编写一个程序,该程序采用整数列表并使用快速排序或合并排序对其进行排序。我很确定函数编写正确,但是当我尝试打印结果时,它没有排序。我是clojure的新手,所以我不知道我是否没有正确返回列表或什么。

(ns mergetime.core)

(use 'clojure.java.io)
(require '[clojure.string :as str])


(defn -main[])

(def string (slurp "100.txt"))
(def numbers (str/split string #"\W+"))
(def nums (mapv #(Integer/parseInt %) numbers))


(defn qsort [L]  
  (if (empty? L)       
    '()      
    (let [[pivot & L2] L]           
      (lazy-cat (qsort (for [y L2 :when (<  y pivot)] y))                     
        (list pivot)                     
        (qsort (for [y L2 :when (>= y pivot)] y))))))


(def nums2 (qsort[nums]))
(println nums2)

我除了要排序的列表,但是我只是得到一个未排序的列表

标签: clojure

解决方案


问题是您将整数向量包装在另一个向量中。

尝试从对 . 的调用中删除方括号qsort

相反,试试这个:

(def nums2 (qsort nums))

推荐阅读