Is there a function which sorts an array up to a given size?
I know that quicksort divides the array into “halves” every time which should make it easy to get the smallest 1000 in an array of a million values. Does someone already implemented something like this?
1 Like
What you want would be select(x, range)
. It returns sorted elements in x[range]
if x
is sorted:
julia> x = shuffle(collect(linspace(0, 1, 50)));
julia> select(x, 1:10)
10-element Array{Float64,1}:
0.0
0.0204082
0.0408163
0.0612245
0.0816327
0.102041
0.122449
0.142857
0.163265
0.183673
Note that this function will be renamed to partialsort
on Julia 1.0.
2 Likes
partialsort
is definitely the better name
?
x
doesn’t have to be sorted, right? Or maybe I just misunderstand you. Anyway. Thanks
Oh and is there a function which gives me the indices then?
You’re right. select(x, range)
returns the same value of sort(x)[range]
.
If you want indices, you can use selectperm
instead, which will be renamed to partialsortperm
on Julia 1.0.
2 Likes
You can also use sort(..., alg=PartialQuickSort(1000))
to sort the array, and I think you can use sortperm
with PartialQuickSort to get the indices.
https://docs.julialang.org/en/stable/stdlib/sort/#Sorting-Algorithms-1
1 Like