#sorting #algorithm #partial #version #cpp

partial_sort

This library provide a Rust version std::partial_sort

5 releases (1 stable)

new 1.0.0 Dec 7, 2024
0.2.0 Feb 20, 2023
0.1.2 Mar 4, 2021
0.1.1 Feb 25, 2021
0.1.0 Feb 25, 2021

#90 in Algorithms

Download history 42001/week @ 2024-08-23 47621/week @ 2024-08-30 44036/week @ 2024-09-06 39675/week @ 2024-09-13 44222/week @ 2024-09-20 38936/week @ 2024-09-27 50215/week @ 2024-10-04 46476/week @ 2024-10-11 48555/week @ 2024-10-18 44046/week @ 2024-10-25 51877/week @ 2024-11-01 42371/week @ 2024-11-08 42994/week @ 2024-11-15 40871/week @ 2024-11-22 38161/week @ 2024-11-29 37056/week @ 2024-12-06

166,498 downloads per month
Used in 135 crates (3 directly)

MIT/Apache

13KB
226 lines

partial_sort

partial_sort is Rust version of std::partial_sort

Usage

use partial_sort::PartialSort;

fn main() {
    let mut vec = vec![4, 4, 3, 3, 1, 1, 2, 2];
    vec.partial_sort(4, |a, b| a.cmp(b));
    assert_eq!(&vec[0..4], &[1, 1, 2, 2]);
}

Benches

First we compare what happens when sorting the entire vector.

Bench env:

$ uname -a
Linux arch 6.8.7-arch1-1 #1 SMP PREEMPT_DYNAMIC Wed, 17 Apr 2024 15:20:28 +0000 x86_64 GNU/Linux

$ cat /proc/cpuinfo | grep '\-Core' | head -1
model name      : AMD Ryzen 9 5950X 16-Core Processor

Bench results:

nth_select sort 10000 limit 20          time:   [8.6016 µs 8.6123 µs 8.6236 µs]
partial sort 10000 limit 20             time:   [5.3522 µs 5.3565 µs 5.3610 µs]   // 1.6x faster
partial sort 10000 limit 200            time:   [15.736 µs 15.749 µs 15.763 µs]
partial sort 10000 limit 2000           time:   [111.97 µs 112.07 µs 112.18 µs]
partial sort 10000 limit 10000          time:   [219.21 µs 222.58 µs 225.85 µs]
stdsort 10000                           time:   [81.795 µs 82.108 µs 82.383 µs]
unstable stdsort 10000                  time:   [65.339 µs 65.355 µs 65.373 µs]
heapsort 10000                          time:   [241.86 µs 242.09 µs 242.29 µs]
partial reverse sort 10000 limit 20     time:   [5.4574 µs 5.4696 µs 5.4843 µs]
stdsort reverse 10000                   time:   [82.680 µs 82.751 µs 82.822 µs]

License

Licensed under either of

No runtime deps