Function core::slice::sort::merge_sort
source · pub fn merge_sort<T, CmpF, ElemAllocF, ElemDeallocF, RunAllocF, RunDeallocF>(
v: &mut [T],
is_less: &mut CmpF,
elem_alloc_fn: ElemAllocF,
elem_dealloc_fn: ElemDeallocF,
run_alloc_fn: RunAllocF,
run_dealloc_fn: RunDeallocF
)where
CmpF: FnMut(&T, &T) -> bool,
ElemAllocF: Fn(usize) -> *mut T,
ElemDeallocF: Fn(*mut T, usize),
RunAllocF: Fn(usize) -> *mut TimSortRun,
RunDeallocF: Fn(*mut TimSortRun, usize),
🔬This is a nightly-only experimental API. (
slice_internals
)Expand description
这个归并排序借用了一些 (但不是全部) 来自 TimSort 的想法,它曾经被详细描述在 这里。 但是 Python 已经切换到基于 Powersort 的实现。
该算法识别严格降序和非降序的子序列,这些子序列称为自然行程。有待合并的待处理运行栈。 将每个新发现的运行推入栈中,然后合并一些相邻的运行对,直到这两个不变量得到满足:
- 对于
1..runs.len()
中的每个i
:runs[i - 1].len > runs[i].len
- 对于
2..runs.len()
中的每个i
:runs[i - 2].len > runs[i - 1].len + runs[i].len
不变量确保最坏情况下的总运行时间为 O(n*log(* n*))。