Skip to content

Commit b33b4e8

Browse files
committed
Return sorted vectors in sort!
1 parent df33439 commit b33b4e8

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
@@ -994,8 +994,7 @@ end
994994
function pagedmergesort!(v::AbstractVector{T}, lo::Integer, hi::Integer, buf::AbstractVector{T}, blockLocation, o=Base.Order.Forward) where T
995995
len = hi + 1 -lo
996996
if len <= Base.SMALL_THRESHOLD
997-
Base.Sort.sort!(v, lo, hi, Base.Sort.InsertionSortAlg(), o)
998-
return
997+
return Base.Sort.sort!(v, lo, hi, Base.Sort.InsertionSortAlg(), o)
999998
end
1000999
m = Base.midpoint(lo,hi)
10011000
pagedmergesort!(v,lo,m,buf,blockLocation,o)
@@ -1005,13 +1004,13 @@ function pagedmergesort!(v::AbstractVector{T}, lo::Integer, hi::Integer, buf::Ab
10051004
else
10061005
pagedMerge!(v, buf, lo, m, hi, blockLocation, o)
10071006
end
1007+
return v
10081008
end
10091009

10101010
function threaded_pagedmergesort!(v::AbstractVector, lo::Integer, hi::Integer, bufs, blockLocations, c::Channel, threadingThreshold::Integer, o=Base.Order.Forward)
10111011
len = hi + 1 -lo
10121012
if len <= Base.SMALL_THRESHOLD
1013-
Base.Sort.sort!(v, lo, hi, Base.Sort.InsertionSortAlg(), o)
1014-
return
1013+
return Base.Sort.sort!(v, lo, hi, Base.Sort.InsertionSortAlg(), o)
10151014
end
10161015
m = Base.midpoint(lo,hi)
10171016
if len > threadingThreshold
@@ -1034,25 +1033,27 @@ function threaded_pagedmergesort!(v::AbstractVector, lo::Integer, hi::Integer, b
10341033
pagedMerge!(v, buf, lo, m, hi, blockLocation, o)
10351034
end
10361035
put!(c,id)
1036+
return v
10371037
end
10381038

10391039
const PAGEDMERGESORT_THREADING_THRESHOLD = 2^13
10401040

10411041
function sort!(v::AbstractVector, lo::Integer, hi::Integer, a::PagedMergeSortAlg, o::Ordering)
1042-
lo >= hi && return
1042+
lo >= hi && return v
10431043
n = hi + 1 - lo
10441044
blocksize = isqrt(n)
10451045
buf = Vector{eltype(v)}(undef,3blocksize)
10461046
nBlocks = n ÷ blocksize
10471047
blockLocation = Vector{Int}(undef,nBlocks+1)
10481048
pagedmergesort!(v,lo,hi,buf,blockLocation,o)
1049+
return v
10491050
end
10501051

10511052
function sort!(v::AbstractVector, lo::Integer, hi::Integer, a::ThreadedPagedMergeSortAlg, o::Ordering)
1052-
lo >= hi && return
1053+
lo >= hi && return v
10531054
n = hi + 1 - lo
10541055
nThreads=Threads.nthreads()
1055-
(n < PAGEDMERGESORT_THREADING_THRESHOLD || nThreads < 2) && (sort!(v, lo, hi, PagedMergeSort, o); return)
1056+
(n < PAGEDMERGESORT_THREADING_THRESHOLD || nThreads < 2) && return sort!(v, lo, hi, PagedMergeSort, o)
10561057
threadingThreshold = max(n ÷ 4nThreads, PAGEDMERGESORT_THREADING_THRESHOLD)
10571058
blocksize = isqrt(n)
10581059
nBlocks = n ÷ blocksize
@@ -1063,5 +1064,6 @@ function sort!(v::AbstractVector, lo::Integer, hi::Integer, a::ThreadedPagedMerg
10631064
put!(c,i)
10641065
end
10651066
threaded_pagedmergesort!(v,lo,hi,bufs,blockLocation,c,threadingThreshold,o)
1067+
return v
10661068
end
10671069
end # module

0 commit comments

Comments
 (0)