Sorting
sort
|
Sort elements in range (function template)
|
stable_sort
|
Sort elements preserving order of equivalents (function template )
|
partial_sort
|
Partially Sort elements in range (function template)
|
partial_sort_copy
|
Copy and partially sort range (function template)
|
nth_element
|
Sort element in range (function template)
|
其中sort,和stable_sort在我的多篇博客出现过,在此不再累赘,想复习sort和stable_sort的朋友,可以翻看我的博客
1partial_sort
template <class RandomAccessIterator>
void partial_sort ( RandomAccessIterator first, RandomAccessIterator middle,
RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void partial_sort ( RandomAccessIterator first, RandomAccessIterator middle,
RandomAccessIterator last, Compare comp );
以上是它的函数原型,它是根据你给的中间地址,然后部分排序,比如你给的地址是 v.begin(),v.begin()+5,v.end(),其中v的大小是10那么结果就是前面五个排序了,后面五个按照原来的顺序,看代码
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
int main(){
int a[]={10,9,8,7,6,5,4,3,2,1};
vector<int>v(a,a+10);
partial_sort(v.begin(),v.begin()+5,v.end());
for(vector<int>::iterator itera=v.begin();itera!=v.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
system("pause");
return 0;
}
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
bool isBigger(int a,int b){
return a>b;
}
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int>v(a,a+10);
partial_sort(v.begin(),v.begin()+5,v.end(),isBigger);
for(vector<int>::iterator itera=v.begin();itera!=v.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
system("pause");
return 0;
}
代码简单,不必解释了吧。
2partial_sort_copy,
函数原型如下:
template <class InputIterator, class RandomAccessIterator>
RandomAccessIterator
partial_sort_copy ( InputIterator first,InputIterator last,
RandomAccessIterator result_first,
RandomAccessIterator result_last );
template <class InputIterator, class RandomAccessIterator, class Compare>
RandomAccessIterator
partial_sort_copy ( InputIterator first,InputIterator last,
RandomAccessIterator result_first,
RandomAccessIterator result_last, Compare comp );
其实它就相当于sort()和copy的结合,所谓的partial没有给定范围,实际上用的比较多的,还是begin--->end
看代码:
#include<iostream>
#include<string>
#include<algorithm>
#include<functional>
#include<vector>
using namespace std;
int main(){
int a[]={4,5,2,1,3,6,9,8,7,2};
vector<int>v(a,a+10);
vector<int>vv(10);
partial_sort_copy(v.begin(),v.end(),vv.begin(),vv.end());
for(vector<int>::iterator itera=vv.begin(); itera!=vv.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
system("pause");
return 0;
}
#include<iostream>
#include<string>
#include<algorithm>
#include<functional>
#include<vector>
using namespace std;
bool isBigger(int a,int b){
return a>b;
}
int main(){
int a[]={4,5,2,1,3,6,9,8,7,2};
vector<int>v(a,a+10);
vector<int>vv(10);
partial_sort_copy(v.begin(),v.end(),vv.begin(),vv.end(),isBigger);
for(vector<int>::iterator itera=vv.begin(); itera!=vv.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
system("pause");
return 0;
}
3nth_element,STL中的nth_element()方法的使用通过调用nth_element(start,
start+n, end) 方法可以使第n大元素处于第n位置(从0开始,其位置是下标为 n的元素),并且比这个元素小的元素都排在这个元素之前,比这个元素大的元素都排在这个元素之后,但不能保证他们是有序的
其函数原型如下:
template <class RandomAccessIterator>
void nth_element ( RandomAccessIterator first, RandomAccessIterator nth,
RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void nth_element ( RandomAccessIterator first, RandomAccessIterator nth,
RandomAccessIterator last, Compare comp );
看下代码:
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
int main(){
int a[]={10,4,2,7,6,5,9,3,8,1};
vector<int>v(a,a+10);
for(vector<int>::iterator itera=v.begin();itera!=v.end();++itera){
cout<<*itera<<" ";
}
cout<<endl;
nth_element(v.begin(),v.begin()+6,v.end());
for(vector<int>::iterator iterb=v.begin();iterb!=v.end();++iterb){
cout<<*iterb<<" ";
}
cout<<endl;
system("pause");
return 0;
}
分享到:
相关推荐
STL中的排序算法一览
用STl实现基数排序算法 功能强大非常适合数据结构课程设计
随便写的一个基数排序算法,很简单,用STL实现
全排序即把所给定范围所有的元素按照大小关系顺序排列。sort采用的是成熟的"快速排序算法"(目前大部分STL版本已经不是采用简单的快速排序,而是结合内插排序算法)
算法:用来处理群集内的元素。它们可以出于不同的目的而搜寻,排序,修改,使用那些元素。... 3)排序值算法:包涵对容器中的值进行排序和合并的算法,还有二叉搜索算法 ,4)通用数值算法:此种算法不多,涉及到专业
一个定义了整数排序的工程,相比课本上的要更加高效和简洁
用STL实现排序,里面用到Set , vector 等,程序简短,高效。
解压后有5个CPP文件。全部VC6.0编译通过并运行。掌握STL的相关函数和算法能大大提高程序的效率。大大缩短程序代码。链表,栈,容器等可直接调用!
1)比较范围:直接插入排序、冒泡法排序、简单选择排序、快速排序1(自己实现)、快速排序2(调用STL)、归并排序。 2)比较指标:a)关键字操作次数(比较次数和移动次数之和),b)排序时间。每个指标采用多次重复...
简单举例普通数组、vector、对象排序 ,列举了默认排序、自定义排序,在自定义排序函数注释部分 点明了容易出问题的地方
通过几天学习终于将标准库中排序相关的函数学完了,虽然有些问题没有搞得非常透彻,但是这些算法用起来应该是没问题了!
通过几天学习终于将标准库中排序相关的函数学完了,虽然有些问题没有搞得非常透彻,但是这些算法用起来应该是没问题了!
条款31:了解你的排序选择 条款32:如果你真的想删除东西的话就在类似remove的算法后接上erase 条款33:提防在指针的容器上使用类似remove的算法 条款34:注意哪个算法需要有序区间 条款35:通过mismatch或...
各种排序算法源代码,各种排序算法性能比较:直接插入排序,希尔排序,冒泡排序,快速排序,简单选择排序,堆排序,二路归并排序,STL排序算法
第23章 排序算法 339 23.1 元素入堆push_heap 339 23.2 创建堆make_heap 343 23.3 元素出堆pop_heap 348 23.4 堆排序sort_heap 351 23.5 是否为堆is_heap 352 23.6 局部排序partial_sort 354 23.7 ...
包括各种基本算法,如比较、交换、查找、排序、遍历操作、复制、修改、移除、反转、合并等等。 STL算法部分主要由头文件和组成。 (3)迭代器(Iterators)。迭代器是面向对象版本的指针,如同指针可以指向内存中...
stl的讲解和算法,容器和排序,迭代器,双段队列等
条款34: 注意哪些算法需要排序过的范围 条款35: 通过mismatch或lexicographical_compare实现简单的忽略大小写字符串比较 条款36: 用not1和remove_copy_if来表现copy_if 条款37: 用accumulate或for_each来统计序列...