Slide 38
Slide 38 text
function quicksort!(ary)
quicksort0!(ary, 0, length(ary) - 1)
end
function quicksort0!(ary, lo, hi)
if lo < hi
piv = partition(ary, lo, hi)
quicksort0!(ary, lo, piv - 1)
quicksort0!(ary, piv + 1, hi)
end
ary
end
function partition(ary, lo, hi)
piv = div((lo + hi), 2)
v = ary[piv + 1]
ary[piv + 1], ary[hi + 1] = ary[hi + 1], ary[piv + 1]
j = lo
@inbounds for i in RbCall.RubyRange(lo, 1, hi, true)
if ary[i + 1] <= v
ary[i + 1], ary[j + 1] = ary[j + 1], ary[i + 1]
j += 1
end
end
ary[j + 1], ary[hi + 1] = ary[hi + 1], ary[j + 1]
j
end
def quicksort!(ary)
quicksort0!(ary, 0, ary.length - 1)
end
def quicksort0!(ary, lo, hi)
if lo < hi
piv = partition(ary, lo, hi)
quicksort0!(ary, lo, piv - 1)
quicksort0!(ary, piv + 1, hi)
end
ary
end
def partition(ary, lo, hi)
piv = (lo + hi).div(2)
v = ary[piv]
ary[piv], ary[hi] = ary[hi], ary[piv]
j = lo
JLTrans.inbounds do
(lo ... hi).each do |i|
if ary[i] <= v
ary[i], ary[j] = ary[j], ary[i]
j += 1
end
end
end
ary[j], ary[hi] = ary[hi], ary[j]
j
end