STL--sort源码分析
Posted zhousong918
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL--sort源码分析相关的知识,希望对你有一定的参考价值。
SGI STL sort源码
temlate <class RandowAccessIterator> inline void sort(RandowAccessIterator first, RandowAccessIterator last){ if(first ! = last){ _introsort_loop(first, last, value_type(first), _lg(last-first)*2); _fina,_insertion_sort(first, last); } }
其中_lg()用来控制分割恶化的情况,分割的层数小于log2(last-first)*2,使用快排,大于时,使用堆排序
template <class RandowAccessIterator, class T, class size> void _introsort_loop(RandowAccessIterator first, RandowAccessIterator last, T*,Size depth_limit){ //首先判断排序区间的元素个数,如果小于等于16,则直接使用插入排序,否则对区间分区 while((last - first) > _stl_threshold){ if(depth_limit == 0){//此时区间的分割次数达到了允许分割次数 partial_sort(first, last, last);//使用heapsort排序 return; } }
--depth_limit;
//以下是median-of-3 partition,选择一个够好的枢纽并决定分割点
//分割点将落在迭代器cut上
RandowAccessIterator cut = _unguarded_partition(first, last, T(_median(*first, *(first + (last - first)/2), *(last - 1))));
//对右半段递归进行sort
_introsort_loop(cut, last, value_type(first), depth_limit);
cut = last;
}
以上是关于STL--sort源码分析的主要内容,如果未能解决你的问题,请参考以下文章
Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )(代码片段
Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段
Android 事件分发事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup )(代码片段