use crate::key::SortableKey;
#[inline]
pub fn sort<T: SortableKey>(slice: &mut [T]) {
let len = slice.len();
if len <= 1 {
return;
}
if len <= 16 {
crate::tiny::sort(slice);
return;
}
if len <= 512 {
crate::small::sort(slice);
return;
}
#[cfg(feature = "alloc")]
{
crate::radix::sort(slice);
}
#[cfg(not(feature = "alloc"))]
{
crate::arch::scalar::quicksort(slice);
}
}
pub fn sort_with_buffer<T: SortableKey>(slice: &mut [T], buffer: &mut [T]) {
assert!(
buffer.len() >= slice.len(),
"buffer too small: need {}, got {}",
slice.len(),
buffer.len()
);
let len = slice.len();
if len <= 1 {
return;
}
if len <= 16 {
crate::tiny::sort(slice);
return;
}
if len <= 512 {
crate::small::sort(slice);
return;
}
crate::radix::sort_with_buffer(slice, buffer);
}