view quicksort.jl @ 0:d0c890aae379

Initial commit
author Lewin Bormann <lbo@spheniscida.de>
date Sat, 26 Nov 2022 09:23:14 +0100
parents
children ed34696a9d9b
line wrap: on
line source


function partition(v::Vector{T}, from::Int, to::Int)::Int where {T}
    if to-from < 1
        return from
    end
    lo, hi = from-1, to+1
    mid = round(Int, (lo+hi)/2)
    piv = v[mid]
    while lo < hi
        lo += 1
        while v[lo] < piv
            lo += 1
        end
        hi -= 1
        while v[hi] > piv
            hi -= 1
        end
        if lo >= hi
            return hi
        end
        v[lo], v[hi] = v[hi], v[lo]
    end
    lo
end

function quicksort!(v::Vector{T}, from=1, to=-1) where {T}
    if to < 0
        to = length(v)
    end
    if to-from == 1
        return
    else
        mid = partition(v, from, to)
        @show (from, to, mid)
        if from < mid
            quicksort!(v, from, mid)
        end
        if mid+1 < to
            quicksort!(v, mid+1, to)
        end
    end
end