в настоящее время программирует алгоритм bubblesort. я нашел исходный код кого-то в Интернете:Как заполнить массив из размера (равный пользовательскому вводу) со случайными уникальными номерами? CLOJURE
Scanner sc = new Scanner(System.in);
System.out.println("Enter the size of the array which you would like to create: ");
Что теперь приложение делает, это то, что он принимает входной номер пользователя. И делает массив случайных чисел. Используя этот массив, он применяет алгоритм Bubblesort.
Теперь, я пытаюсь перевести это на Clojure. Я знаю, что пользовательский ввод может быть достигнут с помощью функций:
Flush
и
read-line
Кроме того, я не понимаю, как получить ввод пользователя для требуемого размера массива, затем создайте массив случайных чисел, а затем примените сортировку пузырьков. До сих пор, это то, что у меня есть (BubbleSort нашел с сайта Розеттский.):
(ns BubbleSort
(:import java.util.ArrayList)
(:import (java.util Date)))
(defn safe-println [& more]
(.write *out* (str (clojure.string/join " " more) "\n")))
; set a timestamp
(defn restart-profiling []
(def last-time-stamp (atom (System/nanoTime))
)
)
; get ms since last timestamp
(defn get-delta-ms []
(let [last @last-time-stamp
current (System/nanoTime)
ticks (- current last)
]
(restart-profiling)
(float (/ ticks 1000000)) ; calculate the delta in milliseconds
)
)
(defn bubble-sort
"Sort in-place.
arr must implement the Java List interface and should support
random access, e.g. an ArrayList."
([arr] (bubble-sort compare arr))
([cmp arr]
(letfn [(swap! [i j]
(let [t (.get arr i)]
(doto arr
(.set i (.get arr j))
(.set j t))))
(sorter [stop-i]
(let [changed (atom false)]
(doseq [i (range stop-i)]
(if (pos? (cmp (.get arr i) (.get arr (inc i))))
(do
(swap! i (inc i))
(reset! changed true))))
@changed))]
(doseq [stop-i (range (dec (.size arr)) -1 -1)
:while (sorter stop-i)])
arr)))
(restart-profiling)
(println (bubble-sort (ArrayList. [10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6
])))
(safe-println "The serial implementation "(get-delta-ms) "ms")
Нужно:
- пользователем вход
- создает массив случайных чисел размера пользовательского ввода
Заранее благодарен!
РЕДАКТИРОВАТЬ:
пользователем вход:
def(input
(println "Enter the size of the array: ")
)
println(read-line)
вход должен определить размер массива.
Оставшаяся часть:
Заселите массив с уникальными случайными числами размера, представленным вводом.
Благодарим вас за комментарий. Я совершенно новичок в clojure, возможно, я не понимаю это правильно, но это не работает? Какие-нибудь советы? – lilienfa
Не могли бы вы уточнить - вы получаете сообщение об ошибке и т. Д.? –
Исключение в потоке «main» java.lang.RuntimeException: EOF во время чтения, thats сообщение об ошибке, которое я получаю. – lilienfa