June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
|
|
@ -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))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue