库函数之sort:
// 语法:
#include <algorithm>
void sort(iterator start,iterator end);
void sort(iterator start,iterator end,StritWeakOrdering cmp);
/*
1,sort()算法将在区间 [start,end)中的元素升序排列。
2,如果两个元素相等,不能保证其维持原来顺序。
3,默认使用<操作符,如果定义比较函数cmp,则使用cmp。
4,sort()算法内部是introsort(内观排序,自省的快排)算法
5,时间复杂度O(N*log(N)) (平均和最坏)
例子:(降序排列)
bool cmp( int a, int b )
{
return a > b;
}
sort( v.begin(), v.end(), cmp );
附:introsort原理
(1)三点中值法。取中间大小的为PIVOT;
(2)分割函数,使用中间左右两部分:L< M < R, 返回M;
(3)左部分递归调用,右部分在循环中处理;
(4)若分割层次大于2*K( K <= lg2N),则调用heapsort,防止退化为N2..;
(5)若当前进入的子序列长度< 16,则退出;(宗旨是调用QUITSORT使之基本有序)
(6)当整个序列基本有序后,直接调用简单插入排序。
*/
// 附:stable_sort partial_sort nth_element() merges()
// 语法:
#include <algorithm>
void stable_sort( iterator start, iterator end );
void stable_sort( iterator start, iterator end, StrictWeakOrdering cmp );
/*
1,升序排列。
2,稳定排序。其代价是增加了时间复杂度,最坏情况下为O(N*(log(N))^2)。
*/
#include <algorithm>
void partial_sort( iterator start, iterator middle, iterator end );
void partial_sort( iterator start, iterator middle, iterator end, StrictWeakOrdering cmp );
/*
1,将区间[start,end)中的前N个元素升序排列;
2,N由start与middle确定。
*/
#include <algorithm>
void nth_element( iterator start, iterator middle, iterator end );
void nth_element( iterator start, iterator middle, iterator end, StrictWeakOrdering cmp );
#include <algorithm>
iterator merge( iterator start1, iterator end1, iterator start2, iterator end2, iterator result );
iterator merge( iterator start1, iterator end1, iterator start2, iterator end2, iterator result, StrictWeakOrdering cmp );
// 语法:
#include <algorithm>
void sort(iterator start,iterator end);
void sort(iterator start,iterator end,StritWeakOrdering cmp);
/*
1,sort()算法将在区间 [start,end)中的元素升序排列。
2,如果两个元素相等,不能保证其维持原来顺序。
3,默认使用<操作符,如果定义比较函数cmp,则使用cmp。
4,sort()算法内部是introsort(内观排序,自省的快排)算法
5,时间复杂度O(N*log(N)) (平均和最坏)
例子:(降序排列)
bool cmp( int a, int b )
{
return a > b;
}
sort( v.begin(), v.end(), cmp );
附:introsort原理
(1)三点中值法。取中间大小的为PIVOT;
(2)分割函数,使用中间左右两部分:L< M < R, 返回M;
(3)左部分递归调用,右部分在循环中处理;
(4)若分割层次大于2*K( K <= lg2N),则调用heapsort,防止退化为N2..;
(5)若当前进入的子序列长度< 16,则退出;(宗旨是调用QUITSORT使之基本有序)
(6)当整个序列基本有序后,直接调用简单插入排序。
*/
// 附:stable_sort partial_sort nth_element() merges()
// 语法:
#include <algorithm>
void stable_sort( iterator start, iterator end );
void stable_sort( iterator start, iterator end, StrictWeakOrdering cmp );
/*
1,升序排列。
2,稳定排序。其代价是增加了时间复杂度,最坏情况下为O(N*(log(N))^2)。
*/
#include <algorithm>
void partial_sort( iterator start, iterator middle, iterator end );
void partial_sort( iterator start, iterator middle, iterator end, StrictWeakOrdering cmp );
/*
1,将区间[start,end)中的前N个元素升序排列;
2,N由start与middle确定。
*/
#include <algorithm>
void nth_element( iterator start, iterator middle, iterator end );
void nth_element( iterator start, iterator middle, iterator end, StrictWeakOrdering cmp );
#include <algorithm>
iterator merge( iterator start1, iterator end1, iterator start2, iterator end2, iterator result );
iterator merge( iterator start1, iterator end1, iterator start2, iterator end2, iterator result, StrictWeakOrdering cmp );
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ahcaigen/archive/2010/02/27/5332627.aspx