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