Попытка быстрой сортировки списка и возврата значения в новую переменную - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь написать программу, которая берет список целых чисел и сортирует его с помощью быстрой сортировки или слияния. Я уверен, что функция написана правильно, но когда я пытаюсь напечатать результаты, это не сортировка. Я новичок в 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)

Я, кроме списка, который нужно отсортировать, однако я просто получаю несортированный список

1 Ответ

0 голосов
/ 12 мая 2019

Проблема в том, что вы заключаете свой вектор целых чисел в другой вектор.

Попробуйте убрать квадратные скобки из вашего вызова на qsort.

Вместо этого попробуйте следующее:

(def nums2 (qsort nums))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...