C++标准库---partial_sort()&partial_sort_copy()
2014-12-22 21:37
459 查看
局部排序:
partial_sort(beg,sortEnd,end)
partial_sort(beg,sortEnd,end,op)
1.以上第一种形式,以operator< 对区间[beg,end)内的元素进行排序,使区间[beg,sortEnd)内的元素处于有序状态。
2.以上第二中形式,运用二元判断式:
op(elem1,elem2)
对区间[beg,end)内的元素进行排序,使区间[beg,sortEnd)内的元素处于有序状态。
3.和sort()不同的是,partial_sort()并不对全部元素排序:一旦第一个元素至sortEnd之间的所有元素都排序完毕,就立即停止,不会对剩余的不必要元素进行排序。
4.如果sortEnd和end相等,那么partial_sort()会对整个序列进行排序。平均而言其效率不及sort(),不过以最差情况而论则优于sort()。
5.复杂度在线性与nlogn之间。
代码示例:
运行结果:
partial_sort_copy(sourceBeg,sourceEnd,destBeg,destEnd)
partial_sort_copy(sourceBeg,sourceEnd,destBeg,destEnd,op)
1.两者都是copy()和partial_sort()的组合;
2.它们将元素从源区间(sourceBeg,sourceEnd)复制到目标区间(destBeg,destEnd),同时进行排序;
3.“被排序(被复制)的元素数量”是源区间和目标区间两者所含元素数量的较小值;
4.两者都返回目标区间内“最后一个被复制元素”的下一个位置;
5.如果目标区间(destBeg,destEnd)内的元素数量大于或等于源区间(sourceBeg,sourceEnd)内的元素数量,则所有元素都会被排序并复制,整个行为就相当于copy()和sort()的组合;
6.复杂度:在线性和nlogn之间。
代码示例:
运行结果:
分析:
第一次调用partial_sort_copy()时,目标区间内只有6个元素,所以该算法只复制6个元素,返回coll6的终点。第二次调用partial_sort_copy()时,由于coll30有充足的空间,所以coll1的所有元素都被复制并排序。
partial_sort(beg,sortEnd,end)
partial_sort(beg,sortEnd,end,op)
1.以上第一种形式,以operator< 对区间[beg,end)内的元素进行排序,使区间[beg,sortEnd)内的元素处于有序状态。
2.以上第二中形式,运用二元判断式:
op(elem1,elem2)
对区间[beg,end)内的元素进行排序,使区间[beg,sortEnd)内的元素处于有序状态。
3.和sort()不同的是,partial_sort()并不对全部元素排序:一旦第一个元素至sortEnd之间的所有元素都排序完毕,就立即停止,不会对剩余的不必要元素进行排序。
4.如果sortEnd和end相等,那么partial_sort()会对整个序列进行排序。平均而言其效率不及sort(),不过以最差情况而论则优于sort()。
5.复杂度在线性与nlogn之间。
代码示例:
#include"fuzhu.h" using namespace std; int main() { deque<int> coll; INSERT_ELEMENTS(coll,3,7); INSERT_ELEMENTS(coll,2,6); INSERT_ELEMENTS(coll,1,5); PRINT_ELEMENTS(coll,"coll: \n"); partial_sort(coll.begin(),coll.begin()+5,coll.end()); PRINT_ELEMENTS(coll,"partial_sort: \n"); partial_sort(coll.begin(),coll.begin()+5,coll.end(),greater<int>()); PRINT_ELEMENTS(coll,"partial_sort >: \n"); partial_sort(coll.begin(),coll.end(),coll.end()); PRINT_ELEMENTS(coll,"partial_sort: \n"); system("pause"); return 0; }
运行结果:
partial_sort_copy(sourceBeg,sourceEnd,destBeg,destEnd)
partial_sort_copy(sourceBeg,sourceEnd,destBeg,destEnd,op)
1.两者都是copy()和partial_sort()的组合;
2.它们将元素从源区间(sourceBeg,sourceEnd)复制到目标区间(destBeg,destEnd),同时进行排序;
3.“被排序(被复制)的元素数量”是源区间和目标区间两者所含元素数量的较小值;
4.两者都返回目标区间内“最后一个被复制元素”的下一个位置;
5.如果目标区间(destBeg,destEnd)内的元素数量大于或等于源区间(sourceBeg,sourceEnd)内的元素数量,则所有元素都会被排序并复制,整个行为就相当于copy()和sort()的组合;
6.复杂度:在线性和nlogn之间。
代码示例:
#include"fuzhu.h" using namespace std; int main() { deque<int> coll1; vector<int> coll6(6); vector<int> coll30(30); INSERT_ELEMENTS(coll1,3,7); INSERT_ELEMENTS(coll1,2,6); INSERT_ELEMENTS(coll1,1,5); PRINT_ELEMENTS(coll1,"coll1: \n"); vector<int>::iterator pos6; pos6=partial_sort_copy(coll1.begin(),coll1.end(),coll6.begin(),coll6.end()); cout<<"coll6: "<<endl; copy(coll6.begin(),pos6,ostream_iterator<int>(cout," ")); cout<<endl; PRINT_ELEMENTS(coll1,"coll1: \n");//可见coll1不变 vector<int>::iterator pos30; pos30=partial_sort_copy(coll1.begin(),coll1.end(),coll30.begin(),coll30.end(),greater<int>()); cout<<"coll30: "<<endl; copy(coll30.begin(),pos30,ostream_iterator<int>(cout," ")); cout<<endl; system("pause"); return 0; }
运行结果:
分析:
第一次调用partial_sort_copy()时,目标区间内只有6个元素,所以该算法只复制6个元素,返回coll6的终点。第二次调用partial_sort_copy()时,由于coll30有充足的空间,所以coll1的所有元素都被复制并排序。
相关文章推荐
- 泛型算法系列28:partial_sort()&&partial_sort_copy()&&partial_sum()
- C++标准库---sort()&stable_sort
- C++标准库---逆转元素reverse()&reverse_copy()
- STL_算法_局部排序(partial_sort、partial_sort_copy)
- C++标准库---旋转元素rotate()&rotate_copy()
- partial_sort_copy
- 1054:主元素<消除法><sort><partial_sort><nth_element>
- STL algorithm算法partial_sort,partial_sort_copy(42)
- C++标准库---逆转元素reverse()&reverse_copy()
- 关于System.in.read() && float字段的条件判断 && System.arraycopy(),Arrays.sort()
- STL源码剖析之算法:partial_sort & partial_sort_copy
- C++标准库---copy()&copy_backward()
- STL_算法_局部排序(partial_sort、partial_sort_copy)
- STL 源码剖析 算法 stl_algo.h -- partial_sort / partial_sort_copy
- STL源码解释-----sort()&&partial_sort()
- STL 源代码剖析 算法 stl_algo.h -- partial_sort / partial_sort_copy
- shell 知识点补充(2)-重定向/ ; , &&, ||/管线命令/grep/sort/ uniq/wc/tee/tr/col/join/paste/expand/split/-
- C++标准库---移除性算法之一remove()&remove_if()
- KNOW: Sort & Search
- 【OC语言】第十篇·NSFileManager、NSDate、沙盒、copy以及单例模式