Crates.io | pdqsort |
lib.rs | pdqsort |
version | 1.0.3 |
source | src |
created_at | 2017-01-26 13:02:25.925167 |
updated_at | 2017-03-27 09:53:44.062068 |
description | Pattern-defeating quicksort |
homepage | |
repository | https://github.com/stjepang/pdqsort |
max_upload_size | |
id | 8227 |
size | 48,114 |
This sort is significantly faster than the standard sort in Rust. In particular, it sorts random arrays of integers approximately 45% faster. The key drawback is that it is an unstable sort (i.e. may reorder equal elements). However, in most cases stability doesn't matter anyway.
The algorithm is based on pdqsort by Orson Peters, published at: https://github.com/orlp/pdqsort
If you're using nightly Rust, you don't need this crate. The sort is as of recently implemented in libcore.
Use it like this:
#![feature(sort_unstable)]
let mut v = [-5, 4, 1, -3, 2];
v.sort_unstable();
assert!(v == [-5, -3, 1, 2, 4]);
See The Unstable Book for more information.
O(n)
.O(n log n)
.#![no_std]
.extern crate pdqsort;
let mut v = [-5i32, 4, 1, -3, 2];
pdqsort::sort(&mut v);
assert!(v == [-5, -3, 1, 2, 4]);
pdqsort::sort_by(&mut v, |a, b| b.cmp(a));
assert!(v == [4, 2, 1, -3, -5]);
pdqsort::sort_by_key(&mut v, |k| k.abs());
assert!(v == [1, 2, -3, 4, -5]);
Sorting 10 million random numbers of type u64
:
Sort | Time |
---|---|
pdqsort | 370 ms |
slice::sort | 668 ms |
quickersort | 777 ms |
rdxsort | 602 ms |