SLT之算法实现
来源:互联网 发布:阳江淘宝贝幼儿园 编辑:程序博客网 时间:2024/05/28 09:32
#ifndef _ALGOBASE_H#define _ALGOBASE_H#include"heap.h"template<class InputIterator,class OutputIterator>inline OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result){return __copy_dispatch<InputIterator, OutputIterator>()(first, last, result);}inline char* copy(const char* first, const char* last, char* result){memmove(result, first, last - first);return result + (last - first);}inline wchar_t* copy(const wchar_t* first, const wchar_t* last, wchar_t* result){memmove(result, first, last - first);return result + (last - first);}template<class InputIterator,class OutputIterator>struct __copy_dispatch{OutputIterator operator()(InputIterator first, InputIterator last, OutputIterator result){return __copy(first, last, result, iterator_category(first));}};template<class T>struct __copy_dispatch<T*, T*>{T* operator()(T* first, T* last, T* result){typedef typename __type_traits<T>::has_trivial_assignment_operator t;return __copy_t(first, last, result, t());}};template<class T>struct __copy_dispatch<const T*, T*>{T* operator()(const T* first, const T* last, T* result){typedef typename __type_traits<T>::has_trivial_assignment_operator t;return __copy_t(first, last, result, t());}};template<class InputIterator,class OutputIterator>inline OutputIterator __copy(InputIterator first, InputIterator last, OutputIterator result, input_iterator_tag_h){for (; first != last; ++first,++result)*result = *first;return result;}template<class InputIterator,class OutputIterator>inline OutputIterator __copy(InputIterator first, InputIterator last, OutputIterator result, random_access_iterator_tag_h){return __copy_d(first, last, result, distance_type(first));}template<class RandomAccessIterator,class OutputIterator,class Distance>inline OutputIterator __copy_d(RandomAccessIterator first, RandomAccessIterator last, OutputIterator result, Distance*){for (Distance n = last - first; n > 0; --n, ++result, ++first)*result = *first;return result;}template<class T>inline T* __copy_t(const T* first, const T* last, T* result, __true_type){memmove(result, first, sizeof(T)*(last - first));return result + (last - first);}template<class T>inline T* __copy_t(const T* first, const T* last, T* result, __false_type){return __copy_d(first, last, result, (ptrdiff_t*)0);}template<class RandomAccessIterator>inline void partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last){__partial_sort(first, middle, last, value_type(first));}template<class RandomAccessIterator,class T>void __partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, T*){mymake_heap(first, middle);for (RandomAccessIterator i = middle; i < last; ++i)if (*i < *first)__pop_heap(first, middle, i, T(*i), distance_type(first));mysort_heap(first, middle);}template<class RandomAccessIterator>void __insertion_sort(RandomAccessIterator first, RandomAccessIterator last){if (first == last)return;for (RandomAccessIterator i = first + 1; i != last; ++i)__linear_insert(first, i, value_type(first));}template<class RandomAccessIterator,class T>inline void __linear_insert(RandomAccessIterator first, RandomAccessIterator last, T*){T value = *last;if (value < *first){std::copy_backward(first, last, last + 1);*first = value;}else__unguarded_linear_insert(last, value);}template<class RandomAccessIterator,class T>void __unguarded_linear_insert(RandomAccessIterator last, T value){RandomAccessIterator next = last;--next;while (value < *next){*last = *next;last = next;--next;}*last = value;}template<class T>inline const T& __median(const T& a, const T& b, const T& c){if (a < b)if (b < c)return b;else if (a < c)return c;elsereturn a;else if (a < c)return a;else if (b < c)return c;elsereturn b;}template<class ForwardIterator1,class ForwardIterator2,class T>inline void __iter_swap(ForwardIterator1 a, ForwardIterator2 b, T*){T tmp = *a;*a = *b;*b = tmp;}template<class ForwardIterator1,class ForwardIterator2>inline void iter_swap(ForwardIterator1 a, ForwardIterator2 b){__iter_swap(a, b, value_type(a));}template<class RandomAccessIterator,class T>RandomAccessIterator __unguarded_partition(RandomAccessIterator first, RandomAccessIterator last, T pivot){while (true){while (*first < pivot) ++first;--last;while (*last > pivot) --last;if (!(first < last))return first;iter_swap(first, last);++first;}}template<class RandomAccessIterator>inline void sort(RandomAccessIterator first, RandomAccessIterator last){if (first != last){__introsort_loop(first, last, value_type(first), __lg(last - first) * 2);__final_insertion_sort(first, last);}}template<class Size>inline Size __lg(Size n){Size k;for (k = 0; n > 1; n >>= 1)++k;return k; }const int __stl_threshold = 16;template<class RandomAccessIterator,class T,class Size>void __introsort_loop(RandomAccessIterator first, RandomAccessIterator last, T*, Size depth_limit){while (last - first > __stl_threshold){if (depth_limit == 0){partial_sort(first, last, last);return;}--depth_limit;RandomAccessIterator cut = __unguarded_partition(first, last, T(__median(*first, *(first + (last - first) / 2), *(last - 1))));__introsort_loop(cut, last, value_type(first), depth_limit);last = cut;}}template<class RandomAccessIterator>void __final_insertion_sort(RandomAccessIterator first, RandomAccessIterator last){if (last - first > __stl_threshold){__insertion_sort(first, first + __stl_threshold);__unguarded_insertion_sort(first + __stl_threshold, last);}else__insertion_sort(first, last);}template<class RandomAccessIterator>inline void __unguarded_insertion_sort(RandomAccessIterator first, RandomAccessIterator last){__unguarded_insertion_sort_aux(first, last, value_type(first));}template<class RandomAccessIterator,class T>void __unguarded_insertion_sort_aux(RandomAccessIterator first, RandomAccessIterator last, T*){for (RandomAccessIterator i = first; i != last; ++i)__unguarded_linear_insert(i, T(*i));} #endif
0 0
- SLT之算法实现
- SLT 内存的分配
- slt 测试camera总线
- slt迭代器失效
- LRU算法之实现
- SAP HANA SLT 复制(SAP HANA SLT Replication)
- SLT logging table already exists
- 算法设计之一些算法的实现
- 信息摘要算法实现之MD5算法
- 算法导论之插入算法JAVA实现
- Java算法实现之KMP算法
- LCS 算法之C++实现
- blowfish算法之VC实现
- 压缩算法实现之LZ78
- KMP算法之JS实现
- Prim算法之邻接矩阵实现
- Dijkstra算法之邻接矩阵实现
- Kruskal算法之邻接矩阵实现
- GNU Linux(Debian系统)桥接的创建与配置
- Centos启动和禁用网卡命令
- Java工程师成神之路
- android从相册中选择报无法加载照片
- 大家好!
- SLT之算法实现
- NGINX-PHP-FPM-配置-最大上传文件
- HTML中的name、id、class用法
- The method setBackground(Drawable) in the type View is not applicable for the arguments (int)
- 云数据库安全初探
- 2015.7.27 ~2015.8.5 北京千锋实训小记
- android studio基本操作
- 安装使用nginx
- extjs-model数据加载