989989function 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
10031003end
10041004
10051005function 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
10321032end
10331033
10341034const PAGEDMERGESORT_THREADING_THRESHOLD = 2 ^ 13
10351035
10361036function 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,3 blocksize)
10411041 nBlocks = n ÷ blocksize
10421042 blockLocation = Vector {Int} (undef,nBlocks+ 1 )
10431043 pagedmergesort! (v,lo,hi,buf,blockLocation,o)
1044+ return v
10441045end
10451046
10461047function 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 ÷ 4 nThreads, 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
10611063end
10621064end # module
0 commit comments