C++ STL之排序算法

排序算法和查找算法差不多,也涉及到迭代器区间问题,关于该问题的注意事项就不在啰嗦了

一、全部排序sort、stable_sort

sort是一种不稳定排序,使用时需要包含头文件algorithm

默认可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。如果只传入这两个地址的话,就按照升序对指定地址区间排序。想要按照降序排列的话,需要传入第三个函数,第三个函数可以自己写cmp,也可以直接调用库函数

greater<data-type>(),使用库函数的时候要包含头文件functional。

总结如下:

#include<algorithm>

#include<functional>

升序:sort(begin,end,less<data-type>());

降序:sort(begin,end,greater<data-type>()).

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<functional>
 4 using namespace std;
 5 int main()
 6 {
 7     int a[9]={454,45564,6,3,5,65,32,53,5};
 8     //升序
 9     sort(a,a+9,less<int>());
10     cout<<"升序排序结果"<<endl;
11     for(int i=0;i<9;i++)
12     {
13         cout<<a[i]<<endl;
14     }
15     //降序
16     sort(a,a+9,greater<int>());
17     cout<<"降序排序结果"<<endl;
18     for(int i=0;i<9;i++)
19     {
20         cout<<a[i]<<endl;
21     }
22     return 0;
23 }

如果忘记了升序或者降序后面的那个方法名称,也可以自己写个简单的

bool cmp(int a,int b)
{
 return a>b;
}

sort(a,a+9,cmp);
就是降序

bool cmp(int a,int b)

{

return a<b;

}

sort(a,a+9,cmp);

就是升序

与之对应的有一个stable_sort()用法与sort一样,是稳定排序。

二、部分排序partial_sort、partial_sort_copy

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int main()
 5 {
 6     int num[10]={3,4,6,7,3,5,2,9,7,8};
 7     for(int i=0;i<10;i++)
 8     {
 9         cout<<num[i]<<" ";
10     }
11     cout<<endl;
12     //partial_sort
13     //void partial_sort(_RanIt _First, _RanIt _Mid, _RanIt _Last, _Pr _Pred)
14     //选出[_First, _Last)之间的_Mid-_First个数进行排序,放在_First到_Mid位置,剩下的在_Mid到_Last的元素不排序,pred是排序方式
15     partial_sort(num,num+3,num+10);
16     for(int i=0;i<10;i++)
17     {
18         cout<<num[i]<<" ";
19     }
20     cout<<endl;
21
22     //partial_sort_copy
23     //_RanIt partial_sort_copy(_InIt _First1, _InIt _Last1,_RanIt _First2, _RanIt _Last2, _Pr _Pred)
24     int shuzi[10]={3,4,6,7,3,5,2,9,7,8};
25     int result1[3];
26     int result2[12];
27     partial_sort_copy(shuzi,shuzi+10,result1,result1+3);
28     for(int i=0;i<10;i++)
29     {
30         cout<<shuzi[i]<<" ";
31     }
32     cout<<endl;
33     for(int i=0;i<3;i++)
34     {
35         cout<<result1[i]<<" ";
36     }
37     cout<<endl;
38
39     partial_sort_copy(shuzi,shuzi+10,result2,result2+12);
40     for(int i=0;i<10;i++)
41     {
42         cout<<shuzi[i]<<" ";
43     }
44     cout<<endl;
45     for(int i=0;i<12;i++)
46     {
47         cout<<result2[i]<<" ";
48     }
49     cout<<endl;
50     return 0;
51 }
时间: 2024-10-29 14:32:34

C++ STL之排序算法的相关文章

STL中排序算法的选择

 当大多数程序员需要对一组对象进行排序的时候,首先想到的一个算法是sort.sort是一个非常不错的算法,但它也并非在任何场合下都是完美无缺的.有时候我们并不需要一个完全的排序操作.比如说,如果我们有一个存放Widget的矢量,而我们希望将质量最好的20个Widget送给最重要的顾客,按照顾客的重要程度送上不同质量的Widget,那么只需要排序出前20个最好的Widget,其他的Widget可以不用排序.在这种情况下,需要的是一种部分排序的功能,而有一个名为partial_sort的算法正好

STL中排序算法

[1]    push_heap:默认为大根堆,主要是上滤操作. [2]    make_heap:创建堆,默认构建大根堆.他的实现基于这样一个简单的想法:将二叉树中的每个仅二层的子树都构成堆,那么整个数据集的布局几乎即可以满足堆的定义. [3]    pop_heap:将已构成堆的迭代器区间中最大值元素移到区间的最后元素位置.原来的最后元素调整为根结点元素后,再对除最后一个元素之外的区间调整. [4]    sort_heap:堆排序,时间复杂度O(nlog2n).内部通过一个while循环调

STL常用排序算法介绍

merge() 以下是排序和通用算法:提供元素排序策略 merge: 合并两个有序序列,存放到另一个序列. #include <iostream> #include <cstdio> #include <algorithm> #include <vector> using namespace std; void printV(vector<int> &v) { for (vector<int>::iterator it = v

STL源代码分析——STL算法sort排序算法

前言 因为在前文的<STL算法剖析>中,源代码剖析许多,不方便学习,也不方便以后复习.这里把这些算法进行归类,对他们单独的源代码剖析进行解说.本文介绍的STL算法中的sort排序算法,SGI STL中的排序算法不是简单的高速排序,而是交叉利用各种排序:堆排序.插入排序和高速排序:这样做的目的是提高效率.针对数据量比較大的採用高速排序,数据量比較小的能够採用堆排序或插入排序. 本文介绍了有关排序的算法random_shuffle.partition.stable_partition.sort.s

STL源码剖析——STL算法之sort排序算法

前言 由于在前文的<STL算法剖析>中,源码剖析非常多,不方便学习,也不方便以后复习,这里把这些算法进行归类,对他们单独的源码剖析进行讲解.本文介绍的STL算法中的sort排序算法,SGI STL中的排序算法不是简单的快速排序,而是交叉利用各种排序:堆排序.插入排序和快速排序:这样做的目的是提高效率,针对数据量比较大的采用快速排序,数据量比较小的可以采用堆排序或插入排序.注意:STL的sort排序算法的迭代器必须是随机访问迭代器. sort排序算法剖析 // Return a random n

STL笔记(6)标准库:标准库中的排序算法

STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew Austern http://www.cuj.com/experts/1908/austern.htm?topic=experts 用泛型算法进行排序    C++标准24章有一个小节叫“Sorting and related operations”.它包含了很多对已序区间进行的操作,和三个排序用泛型

STL中sort排序算法第三个参数_Compare的实现本质

关于C++ STL vector 中的sort排序算法有三种自定义实现,它们本质上都是返回bool类型,提供给sort函数作为第三个参数. 重载运算符 全局的比较函数 函数对象 我认为从实现方式看,重载运算符和函数对象实现本质上是一样的:两者都是括号运算符的重载. 重载运算符利用了泛型模板,再重载模板中的括号运算福,接着重载里面的大于小于操作符: 而函数对象则是直接针对自己的对象重载括号运算符. 下图是其中一个泛型模板比较函数,位于头文件stl_function.h中. 『注:本文来自博客园“小

STL算法之排序算法

STL排序算法通常复杂度坏于线性,且必须要random-access Iterators. 所以,forward_list, list, associative and unordered contains 不提供随机访问迭代器,这些容器不能用排序算法. 但是,forward_list,list提供了成员函数sort,associative contains 自动排序,unordered contains不能排序. 通常,排序元素一次要比保持元素有序要更快.STL提供了不同的排序算法,根据需求选

STl中的排序算法

本文转自:STl中的排序算法 1. 所有STL sort算法函数的名字列表: 函数名    功能描述 sort   对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素部分排序 partial_sort_copy    对给定区间复制并排序 nth_element 找出给定区间的某个位置对应的元素 is_sorted               判断一个区间是否已经排好序 partition     使得符合某个条件的元