我使用vscode左边栏的run and debug, 添加了一些断点,可以看到local变量每次运行的变化…
但函数qsort!里又出现了qsort!击溃了我。这来自于c吗?
把函数体当作一种循环之后这个套娃变得好接受了。
我想我现在的问题在于:
pivot = a[(lo+hi)>>>1]
这个函数来自于官方主页,那么我认为它就是最优算法,那么为什么这样做是最优的呢?
function qsort!(a,lo,hi)
i, j = lo, hi
while i < hi
pivot = a[(lo+hi)>>>1]
while i <= j
while a[i] < pivot; i += 1; end
while a[j] > pivot; j -= 1; end
if i <= j
a[i], a[j] = a[j], a[i]
i, j = i+1, j-1
end
end
if lo < j; qsort!(a,lo,j); end
lo, j = i, hi
end
return a
end
sortperf(n) = qsort!(rand(n), 1, n)
sortperf(6)
代码引自:
Microbenchmarks/perf.jl at master · JuliaLang/Microbenchmarks · GitHub
我试图debug:
F5(继续):每一行添加断点,运行代码。
这里发现每一行添加断点和单步调试的区别:
F11(单步调试):跳到了另一个page里
@eval setindex!(A::Array{T}, x, i1::Int) where {T} = arrayset($(Expr(:boundscheck)), A, convert(T,x)::T, i1)
vscode这个debug还能快一些吗,读秒时间有点久了,助长self-humiliation…