uvector-algorithms-0.1: Efficient algorithms for uvector unboxed arrays

Portability Portable Experimental Dan Doel

Data.Array.Vector.Algorithms.Optimal

Description

Optimal sorts for very small array sizes, or for small numbers of particular indices in a larger array (to be used, for instance, for sorting a median of 3 values into the lowest position in an array for a median-of-3 quicksort).

Synopsis

# Documentation

sort2ByIndex :: UA e => Comparison e -> MUArr e s -> Int -> Int -> ST s ()Source

Sorts the elements at the two given indices using the comparison. This is essentially a compare-and-swap, although the first index is assumed to be the `lower` of the two.

sort2ByOffset :: UA e => Comparison e -> MUArr e s -> Int -> ST s ()Source

Sorts the elements at the positions `off` and 'off + 1' in the given array using the comparison.

sort3ByIndex :: UA e => Comparison e -> MUArr e s -> Int -> Int -> Int -> ST s ()Source

Sorts the elements at the three given indices. The indices are assumed to be given from lowest to highest, so if 'l < m < u' then 'sort3ByIndex cmp a m l u' essentially sorts the median of three into the lowest position in the array.

sort3ByOffset :: UA e => Comparison e -> MUArr e s -> Int -> ST s ()Source

Sorts the three elements starting at the given offset in the array.

sort4ByIndex :: UA e => Comparison e -> MUArr e s -> Int -> Int -> Int -> Int -> ST s ()Source

Sorts the elements at the four given indices. Like the 2 and 3 element versions, this assumes that the indices are given in increasing order, so it can be used to sort medians into particular positions and so on.

sort4ByOffset :: UA e => Comparison e -> MUArr e s -> Int -> ST s ()Source

Sorts the four elements beginning at the offset.