Skip to content

Commit 0d4aa65

Browse files
committed
Return sorted vectors in sort!
1 parent e0ebe94 commit 0d4aa65

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

src/SortingAlgorithms.jl

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -989,8 +989,7 @@ end
989989
function pagedmergesort!(v::AbstractVector{T}, lo::Integer, hi::Integer, buf::AbstractVector{T}, blockLocation, o=Base.Order.Forward) where T
990990
len = hi + 1 -lo
991991
if len <= Base.SMALL_THRESHOLD
992-
Base.Sort.sort!(v, lo, hi, Base.Sort.InsertionSortAlg(), o)
993-
return
992+
return Base.Sort.sort!(v, lo, hi, Base.Sort.InsertionSortAlg(), o)
994993
end
995994
m = Base.midpoint(lo,hi)
996995
pagedmergesort!(v,lo,m,buf,blockLocation,o)
@@ -1000,13 +999,13 @@ function pagedmergesort!(v::AbstractVector{T}, lo::Integer, hi::Integer, buf::Ab
1000999
else
10011000
pagedMerge!(v, buf, lo, m, hi, blockLocation, o)
10021001
end
1002+
return v
10031003
end
10041004

10051005
function threaded_pagedmergesort!(v::AbstractVector, lo::Integer, hi::Integer, bufs, blockLocations, c::Channel, threadingThreshold::Integer, o=Base.Order.Forward)
10061006
len = hi + 1 -lo
10071007
if len <= Base.SMALL_THRESHOLD
1008-
Base.Sort.sort!(v, lo, hi, Base.Sort.InsertionSortAlg(), o)
1009-
return
1008+
return Base.Sort.sort!(v, lo, hi, Base.Sort.InsertionSortAlg(), o)
10101009
end
10111010
m = Base.midpoint(lo,hi)
10121011
if len > threadingThreshold
@@ -1029,25 +1028,27 @@ function threaded_pagedmergesort!(v::AbstractVector, lo::Integer, hi::Integer, b
10291028
pagedMerge!(v, buf, lo, m, hi, blockLocation, o)
10301029
end
10311030
put!(c,id)
1031+
return v
10321032
end
10331033

10341034
const PAGEDMERGESORT_THREADING_THRESHOLD = 2^13
10351035

10361036
function sort!(v::AbstractVector, lo::Integer, hi::Integer, a::PagedMergeSortAlg, o::Ordering)
1037-
lo >= hi && return
1037+
lo >= hi && return v
10381038
n = hi + 1 - lo
10391039
blocksize = isqrt(n)
10401040
buf = Vector{eltype(v)}(undef,3blocksize)
10411041
nBlocks = n ÷ blocksize
10421042
blockLocation = Vector{Int}(undef,nBlocks+1)
10431043
pagedmergesort!(v,lo,hi,buf,blockLocation,o)
1044+
return v
10441045
end
10451046

10461047
function sort!(v::AbstractVector, lo::Integer, hi::Integer, a::ThreadedPagedMergeSortAlg, o::Ordering)
1047-
lo >= hi && return
1048+
lo >= hi && return v
10481049
n = hi + 1 - lo
10491050
nThreads=Threads.nthreads()
1050-
(n < PAGEDMERGESORT_THREADING_THRESHOLD || nThreads < 2) && (sort!(v, lo, hi, PagedMergeSort, o); return)
1051+
(n < PAGEDMERGESORT_THREADING_THRESHOLD || nThreads < 2) && return sort!(v, lo, hi, PagedMergeSort, o)
10511052
threadingThreshold = max(n ÷ 4nThreads, PAGEDMERGESORT_THREADING_THRESHOLD)
10521053
blocksize = isqrt(n)
10531054
nBlocks = n ÷ blocksize
@@ -1058,5 +1059,6 @@ function sort!(v::AbstractVector, lo::Integer, hi::Integer, a::ThreadedPagedMerg
10581059
put!(c,i)
10591060
end
10601061
threaded_pagedmergesort!(v,lo,hi,bufs,blockLocation,c,threadingThreshold,o)
1062+
return v
10611063
end
10621064
end # module

0 commit comments

Comments
 (0)