Skip to content

Commit ea4eb9a

Browse files
committed
Change function argument locations to match base.Sort
- input array - indices to sort - algorithm - ordering - scratch space - multithreading-specific
1 parent dab157f commit ea4eb9a

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

src/SortingAlgorithms.jl

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,7 @@ end
686686

687687
# merge v[lo:hiA] and v[hiA+1:hi] ([A;B]) using buffer t[1:1 + hi-lo]
688688
# this is faster than merge! but requires twice as much auxiliary memory.
689-
function twoended_merge!(v::AbstractVector{T}, t::AbstractVector{T}, lo::Integer, hiA::Integer, hi::Integer, o::Ordering) where T
689+
function twoended_merge!(v::AbstractVector{T}, lo::Integer, hiA::Integer, hi::Integer, o::Ordering, t::AbstractVector{T}) where T
690690
@assert lo <= hiA <= hi
691691
loA = lo
692692
loB = hiA + 1
@@ -757,7 +757,7 @@ end
757757

758758
# merge v[lo:lo+lenA-1] and v[lo+lenA:hi] using buffer t[1:lenA]
759759
# based on Base.Sort MergeSort
760-
function merge!(v::AbstractVector{T}, t::AbstractVector{T}, lo::Integer, hi::Integer, lenA::Integer, o::Ordering) where T
760+
function merge!(v::AbstractVector{T}, lo::Integer, hi::Integer, lenA::Integer, o::Ordering, t::AbstractVector{T}) where T
761761
@inbounds begin
762762
i = 1
763763
j = lo
@@ -805,7 +805,7 @@ macro getNextBlock!()
805805
end
806806

807807
# merge v[lo:hiA] and v[hiA+1:hi] using buffer buf in O(sqrt(n)) space
808-
function pagedMerge!(v::AbstractVector{T}, buf::AbstractVector{T}, lo::Integer, hiA::Integer, hi::Integer, blockLocation::AbstractVector{<:Integer}, o::Ordering) where T
808+
function pagedMerge!(v::AbstractVector{T}, lo::Integer, hiA::Integer, hi::Integer, o::Ordering, buf::AbstractVector{T}, blockLocation::AbstractVector{<:Integer}) where T
809809
@assert lo < hiA < hi
810810
iA = lo
811811
iB = hiA + 1
@@ -815,7 +815,7 @@ function pagedMerge!(v::AbstractVector{T}, buf::AbstractVector{T}, lo::Integer,
815815

816816
# regular merge if buffer is big enough
817817
if lenA <= length(buf)
818-
merge!(v, buf, lo, hi, lenA, o)
818+
merge!(v, lo, hi, lenA, o, buf)
819819
return
820820
elseif lenB <= length(buf)
821821
# TODO ?
@@ -998,18 +998,18 @@ end
998998
# -> redefine for compatibility with earlier versions
999999
midpoint(lo::Integer, hi::Integer) = lo + ((hi - lo) >>> 0x01)
10001000

1001-
function pagedmergesort!(v::AbstractVector{T}, lo::Integer, hi::Integer, buf::AbstractVector{T}, blockLocation, o=Base.Order.Forward) where T
1001+
function pagedmergesort!(v::AbstractVector{T}, lo::Integer, hi::Integer, o::Ordering, buf::AbstractVector{T}, blockLocation) where T
10021002
len = hi + 1 -lo
10031003
if len <= Base.SMALL_THRESHOLD
10041004
return Base.Sort.sort!(v, lo, hi, Base.Sort.InsertionSortAlg(), o)
10051005
end
10061006
m = midpoint(lo, hi)
1007-
pagedmergesort!(v, lo, m, buf, blockLocation, o)
1008-
pagedmergesort!(v, m+1, hi, buf, blockLocation, o)
1007+
pagedmergesort!(v, lo, m, o, buf, blockLocation)
1008+
pagedmergesort!(v, m+1, hi, o, buf, blockLocation)
10091009
if len <= length(buf)
1010-
twoended_merge!(v, buf, lo, m, hi, o)
1010+
twoended_merge!(v, lo, m, hi, o, buf)
10111011
else
1012-
pagedMerge!(v, buf, lo, m, hi, blockLocation, o)
1012+
pagedMerge!(v, lo, m, hi, o, buf, blockLocation)
10131013
end
10141014
return v
10151015
end
@@ -1021,21 +1021,21 @@ function sort!(v::AbstractVector, lo::Integer, hi::Integer, ::PagedMergeSortAlg,
10211021
buf = Vector{eltype(v)}(undef, 3blocksize)
10221022
nBlocks = n ÷ blocksize
10231023
blockLocation = Vector{Int}(undef, nBlocks+1)
1024-
pagedmergesort!(v, lo, hi, buf, blockLocation, o)
1024+
pagedmergesort!(v, lo, hi, o, buf, blockLocation)
10251025
return v
10261026
end
10271027

10281028
Base.@static if VERSION >= v"1.3"
10291029
const PAGEDMERGESORT_THREADING_THRESHOLD = 2^13
1030-
function threaded_pagedmergesort!(v::AbstractVector, lo::Integer, hi::Integer, bufs, blockLocations, c::Channel, threadingThreshold::Integer, o=Base.Order.Forward)
1030+
function threaded_pagedmergesort!(v::AbstractVector, lo::Integer, hi::Integer, o::Ordering, bufs, blockLocations, c::Channel, threadingThreshold::Integer)
10311031
len = hi + 1 -lo
10321032
if len <= Base.SMALL_THRESHOLD
10331033
return Base.Sort.sort!(v, lo, hi, Base.Sort.InsertionSortAlg(), o)
10341034
end
10351035
m = midpoint(lo, hi)
10361036
if len > threadingThreshold
1037-
thr = Threads.@spawn threaded_pagedmergesort!(v, lo, m, bufs, blockLocations, c, threadingThreshold, o)
1038-
threaded_pagedmergesort!(v, m+1, hi, bufs, blockLocations, c, threadingThreshold, o)
1037+
thr = Threads.@spawn threaded_pagedmergesort!(v, lo, m, o, bufs, blockLocations, c, threadingThreshold)
1038+
threaded_pagedmergesort!(v, m+1, hi, o, bufs, blockLocations, c, threadingThreshold)
10391039
wait(thr)
10401040
id = take!(c)
10411041
buf = bufs[id]
@@ -1044,13 +1044,13 @@ function threaded_pagedmergesort!(v::AbstractVector, lo::Integer, hi::Integer, b
10441044
id = take!(c)
10451045
buf = bufs[id]
10461046
blockLocation = blockLocations[id]
1047-
pagedmergesort!(v, lo, m, buf, blockLocation, o)
1048-
pagedmergesort!(v, m+1, hi, buf, blockLocation, o)
1047+
pagedmergesort!(v, lo, m, o, buf, blockLocation)
1048+
pagedmergesort!(v, m+1, hi, o, buf, blockLocation)
10491049
end
10501050
if len <= length(buf)
1051-
twoended_merge!(v, buf, lo, hi, m, o)
1051+
twoended_merge!(v, lo, hi, m, o, buf)
10521052
else
1053-
pagedMerge!(v, buf, lo, m, hi, blockLocation, o)
1053+
pagedMerge!(v, lo, m, hi, o, buf, blockLocation)
10541054
end
10551055
put!(c, id)
10561056
return v
@@ -1069,7 +1069,7 @@ function sort!(v::AbstractVector, lo::Integer, hi::Integer, ::ThreadedPagedMerge
10691069
for i=1:nThreads
10701070
put!(c, i)
10711071
end
1072-
threaded_pagedmergesort!(v, lo, hi, bufs, blockLocation, c, threadingThreshold, o)
1072+
threaded_pagedmergesort!(v, lo, hi, o, bufs, blockLocation, c, threadingThreshold)
10731073
return v
10741074
end
10751075
else

0 commit comments

Comments
 (0)