- deterministic (but not necessarily stable)
- fast, especially for common cases (0-5 elements of size 8 or 4)
- The implementation uses a network sort for up to 5 elements and
+ The implementation uses sorting networks for up to 5 elements and
a merge sort on top of that. Neither stage has branches depending on
comparator result, trading extra arithmetic for branch mispredictions. */
char *out; // output buffer
size_t n; // number of elements
size_t size; // element size
- size_t nlim; // limit for network sort
+ size_t nlim; // limit for using sorting networks
};
/* Like sort_ctx, but for use with qsort_r-style comparators. Several
return x & (c->cmp (e0, e1) >> 31);
}
-/* Execute network sort on 2 to 5 elements from IN, placing them into C->OUT.
+/* Apply a sorting network to 2 to 5 elements from IN, placing them into C->OUT.
IN may be equal to C->OUT, in which case elements are sorted in place. */
template<typename sort_ctx>
static void