Sorting algorithms/Tree sort on a linked list: Difference between revisions
Content added Content deleted
(added Ol) |
(julia example) |
||
Line 185: | Line 185: | ||
But task's the current url for Finnegan's Wake does not point at flat text and constructing such a thing would be a different task... |
But task's the current url for Finnegan's Wake does not point at flat text and constructing such a thing would be a different task... |
||
=={{header|Julia}}== |
|||
<lang julia>mutable struct BTree{T} |
|||
data::T |
|||
left::Union{BTree, Nothing} |
|||
right::Union{BTree, Nothing} |
|||
BTree(val::T) where T = new{T}(val, nothing, nothing) |
|||
end |
|||
function insert(tree, data) |
|||
if data < tree.data |
|||
if tree.left == nothing |
|||
tree.left = BTree(data) |
|||
else |
|||
insert(tree.left, data) |
|||
end |
|||
else |
|||
if tree.right == nothing |
|||
tree.right = BTree(data) |
|||
else |
|||
insert(tree.right, data) |
|||
end |
|||
end |
|||
end |
|||
function sorted(tree) |
|||
return tree == nothing ? [] : |
|||
typeof(tree.data)[sorted(tree.left); tree.data; sorted(tree.right)] |
|||
end |
|||
function arraytotree(arr) |
|||
tree = BTree(arr[1]) |
|||
for data in arr[2:end] |
|||
insert(tree, data) |
|||
end |
|||
return tree |
|||
end |
|||
function testtreesort(arr) |
|||
println("Unsorted: ", arr) |
|||
tree = arraytotree(arr) |
|||
println("Sorted: ", sorted(tree)) |
|||
end |
|||
testtreesort(rand(1:99, 12)) |
|||
</lang>{{out}} |
|||
<pre> |
|||
Unsorted: [1, 12, 15, 22, 28, 26, 69, 22, 1, 62, 73, 95] |
|||
Sorted: [1, 1, 12, 15, 22, 22, 26, 28, 62, 69, 73, 95] |
|||
</pre> |
|||
=={{header|Kotlin}}== |
=={{header|Kotlin}}== |