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*))。