# sorting_rs Sorting algorithms implemented in Rust. ## Usage 1. Add this dependency and please consider it's version into your Cargo.toml: ```toml [dependencies] sorting_rs = "1.2.0" ``` 2. Use available sorting algorithms in your Rust code: ```rust use sorting_rs::*; ``` 3. API for every sorting function is pretty the same: you just have to pass mutable reference: `&mut [T]`, or `vec![T, T, T, ...]`. `T` should have `PartialOrd` trait, sometimes you may need `Copy` or `Clone` traits, though all implementations try to avoid this kind of additional requirements. 4. For more information about origin of algorithms and implementation details, please read modules documentation. [Wikipedia](https://en.wikipedia.org/wiki/Sorting_algorithm) is nice starting point too. ## This library contains following sorting algorithms: | Sorting algorithm | Features and downsides | Worst-case performance O(): comparisons; swaps | Best-case performance O(): comparisons; swaps | Space complexity O() | | ----------------- | -------------------------------------------------------------------- | ---------------------------------------------- | --------------------------------------------- | ---------------------- | | Bingo | aims to be faster than selection sort if there are duplicates | `n + m`2 | `nm` | | | Bitonic | method based on building a sorting network | `nlog``2``n` | `nlog``2``n` | `nlog``2``n`| | Bubble | bad for sorted or reversed input | `n``2`; `n``2` | `n`; `1` | `1` | | Cocktail | little performance improvement over bubble sort | `n``2` | `n` | `1` | | Comb | speeds up when data is nearly sorted | `n``2` | `nlogn` | `1` | | Cycle | uses minimum amount of writes, good for memory with limited TBW | `n``2` | `n``2` | `1` | | Gnome | simple and slow, works with one item at a time | `n``2` | `n` | `1` | | Heap | independent of data distribution | `nlogn` | `nlogn` | `1` | | Weak Heap | independent of data distribution, decreased number of comparisons | `nlogn` | `nlogn` | `1` | | N-Heap | should be faster than default heap. N = 3 | `nlogn` | `nlogn` | `1` | | Bottom-up Heap | upgraded version of heapsort with decreased number of comparisons | `nlogn` | `nlogn` | `1` | | Insertion | simple, but less effective than quicksort, heapsort or merge sort | `n``2`; `n``2` | `n`; `1` | `1` | | Merge | independent of data distribution | `nlogn` | `nlogn` | `n` | | Merge Bottom-up | independent of data distribution, modified version of mergesort | `nlogn` | `nlogn` | `n` | | Odd-even | presented to be effective on processors with local interconnections | `n``2` | `n` | `1` | | Odd-even Batcher | more efficient version of odd-even sort | `log``2``n` | `log``2``n` | `logn``2` | | Pancake | swaps data a lot and not so effective in practice | `n``3`; `2n - 3` | `n``2` | `n` | | Quick | bad for sorted or reversed input | `n``2` | `nlogn` | `logn` | | Quick dual | enchanced version of quicksort | `n``2` | `2nlnn` | `logn` | | Ksort | quicksort variant, faster than heap at less than 7 million elements | `n``2` | `nlog`2`n` | `logn` | | Selection | the least number of swaps among all the algorithms | `n``2`; `n` | `n``2`; `1` | `1` | | Double selection | modified selection sort with more workload, but better efficiency | `n``2`; `n` | `n``2`; `1` | higher than Selection | | Shellsort | it is optimization of insertion sort | `n``3/2` or `nlogn``2` | `nlogn` | `1` | | Slow | it's slow, who would ever need it? | | | | | Smooth | variant of heapsort, good for nearly sorted data | `nlogn` | `n` | `1` | | Stooge | it's a bit faster than slow sort | `n``2.7095` | | `n` | New algorithms implementations are planned in future