June 2018 Update

This commit is contained in:
Ingy döt Net 2018-06-22 20:57:24 +00:00
parent ba8067c3b7
commit 22f33d4004
5278 changed files with 84726 additions and 14379 deletions

View file

@ -1,42 +1,27 @@
function mergesort!(A::AbstractVector)
if length(A) <= 1
return A
end
middle = div(length(A), 2)
left = mergesort(A[1:middle])
right = mergesort(A[middle + 1:end])
result = Array(eltype(left), length(left) + length(right))
idx = 1
@inbounds while !isempty(left) && !isempty(right)
if left[1] <= right[1]
result[idx] = left[1]
left = left[2:end]
function mergesort(arr::Vector)
if length(arr) ≤ 1 return arr end
mid = length(arr) ÷ 2
lpart = mergesort(arr[1:mid])
rpart = mergesort(arr[mid+1:end])
rst = similar(arr)
i = ri = li = 1
@inbounds while li ≤ length(lpart) && ri ≤ length(rpart)
if lpart[li] ≤ rpart[ri]
rst[i] = lpart[li]
li += 1
else
result[idx] = right[1]
right = right[2:end]
rst[i] = rpart[ri]
ri += 1
end
idx += 1
i += 1
end
@inbounds while !isempty(left)
result[idx] = left[1]
left = left[2:end]
idx += 1
if li ≤ length(lpart)
copy!(rst, i, lpart, li)
else
copy!(rst, i, rpart, ri)
end
@inbounds while !isempty(right)
result[idx] = right[1]
right = right[2:end]
idx += 1
end
for i=1:length(A)
A[i] = result[i]
end
return A
return rst
end
function mergesort(A::AbstractVector)
return mergesort!(copy(A))
end
A = randcycle(10)
println("unsorted: ", A)
println("sorted: ", mergesort(A))
v = rand(-10:10, 10)
println("# unordered: $v\n -> ordered: ", mergesort(v))