`
java-mans
  • 浏览: 11427783 次
文章分类
社区版块
存档分类
最新评论

STL之排序算法

 
阅读更多

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实现基数排序算法

    用STl实现基数排序算法 功能强大非常适合数据结构课程设计

    简单的基数排序算法,STL实现

    随便写的一个基数排序算法,很简单,用STL实现

    STl中的排序算法详细解析

    全排序即把所给定范围所有的元素按照大小关系顺序排列。sort采用的是成熟的"快速排序算法"(目前大部分STL版本已经不是采用简单的快速排序,而是结合内插排序算法)

    stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列)

    算法:用来处理群集内的元素。它们可以出于不同的目的而搜寻,排序,修改,使用那些元素。... 3)排序值算法:包涵对容器中的值进行排序和合并的算法,还有二叉搜索算法 ,4)通用数值算法:此种算法不多,涉及到专业

    比STL更快的整数排序算法

    一个定义了整数排序的工程,相比课本上的要更加高效和简洁

    STL 实现奥运会奖牌排序系统

    用STL实现排序,里面用到Set , vector 等,程序简短,高效。

    STL代码大全(容器,链表,栈,算法,排序等)

    解压后有5个CPP文件。全部VC6.0编译通过并运行。掌握STL的相关函数和算法能大大提高程序的效率。大大缩短程序代码。链表,栈,容器等可直接调用!

    内部排序算法比较

    1)比较范围:直接插入排序、冒泡法排序、简单选择排序、快速排序1(自己实现)、快速排序2(调用STL)、归并排序。 2)比较指标:a)关键字操作次数(比较次数和移动次数之和),b)排序时间。每个指标采用多次重复...

    STL 1.算法之1.1Sort用法 及注意事项

    简单举例普通数组、vector、对象排序 ,列举了默认排序、自定义排序,在自定义排序函数注释部分 点明了容易出问题的地方

    c++STL学习——排序算法技术总结和用法代码实例(一)

    通过几天学习终于将标准库中排序相关的函数学完了,虽然有些问题没有搞得非常透彻,但是这些算法用起来应该是没问题了!

    c++STL学习——排序算法技术总结和用法代码实例(二)

    通过几天学习终于将标准库中排序相关的函数学完了,虽然有些问题没有搞得非常透彻,但是这些算法用起来应该是没问题了!

    effective stl stl 技巧

    条款31:了解你的排序选择 条款32:如果你真的想删除东西的话就在类似remove的算法后接上erase 条款33:提防在指针的容器上使用类似remove的算法 条款34:注意哪个算法需要有序区间 条款35:通过mismatch或...

    各种排序算法的实现及性能比较

    各种排序算法源代码,各种排序算法性能比较:直接插入排序,希尔排序,冒泡排序,快速排序,简单选择排序,堆排序,二路归并排序,STL排序算法

    C++ STL开发技术导引(第5章)

    第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

    包括各种基本算法,如比较、交换、查找、排序、遍历操作、复制、修改、移除、反转、合并等等。 STL算法部分主要由头文件和组成。 (3)迭代器(Iterators)。迭代器是面向对象版本的指针,如同指针可以指向内存中...

    stl的讲解和算法

    stl的讲解和算法,容器和排序,迭代器,双段队列等

    Effictive STL CHM中文版

    条款34: 注意哪些算法需要排序过的范围 条款35: 通过mismatch或lexicographical_compare实现简单的忽略大小写字符串比较 条款36: 用not1和remove_copy_if来表现copy_if 条款37: 用accumulate或for_each来统计序列...

Global site tag (gtag.js) - Google Analytics