994994function 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
10081008end
10091009
10101010function 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
10371037end
10381038
10391039const PAGEDMERGESORT_THREADING_THRESHOLD = 2 ^ 13
10401040
10411041function 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,3 blocksize)
10461046 nBlocks = n ÷ blocksize
10471047 blockLocation = Vector {Int} (undef,nBlocks+ 1 )
10481048 pagedmergesort! (v,lo,hi,buf,blockLocation,o)
1049+ return v
10491050end
10501051
10511052function 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 ÷ 4 nThreads, 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
10661068end
10671069end # module
0 commit comments