在C++ std库中使用sort()
介绍
我们将讨论C++中std库中的sort()函数。
对于基础知识,排序是系统地对项目进行排序的任何过程。
这些项目可以是序列的元素或者任何数据结构。
在C++中,标准库提供了一个预定义的,随时可以使用的函数sort()来执行此排序操作。
因此,让我们开始吧。
C++中的std :: sort()函数
C++中的std :: sort()
函数是一个内置函数,用于按特定顺序对任何形式的数据结构进行排序。
它在" algorithm"头文件中定义。
下面给出了sort()函数原型。
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
在此,该函数不返回任何内容。
它只是从"第一个"到"最后一个"可迭代项或者位置更新元素/项。
第三个参数(可选)comp必须是一个确定元素排序顺序的函数。
如果未指定,则默认升序进行排序,因为它是std :: less <int>()函数。
" sort()"函数使用一种称为Introsort的3倍混合排序技术。
它是快速排序,堆排序和插入排序的组合。
使用C++中的sort()函数对数据进行排序
现在我们已经了解了sort()函数的基础知识,让我们在C++程序中使用它来对某些数据结构(例如数组)进行排序。
1.升序排列
如前所述,默认情况下,当未提及comp
参数时,sort()函数会按升序对一组项目进行排序。
因此,对于下面的示例,我们仅传递了" first"(开始)和" last"(结束)可迭代对象,以对数组进行升序排序。
#include<iostream> #include<algorithm> using namespace std; int main() { //array initialisation int demo[5] = {5, 4, 3, 2, 1}; int len = sizeof(demo)/sizeof(demo[0]); cout<<"Before sorting array : "; for(int i=0; i<len; i++) { cout<<" "<<demo[i]; } std::sort(demo, demo + len);//Sorting demo array cout<<"\n\nAfter sorting array : "; for(int i=0; i<len; i++) { cout<<" "<<demo[i]; } return 0; }
其中" demo"是给定数组的第一个元素的地址,而"(demo + len)"是给定数组的最后一个元素的地址。
因此默认情况下考虑将comp作为std :: less <int>()函数,sort()函数以升序对数组进行排序。
注意:std :: less <int>()函数比较两个参数,并根据第一个参数是否小于另一个参数返回True或者False。
2.降序排列
我们还可以通过使用sort()函数的第三个参数,以降序对数据结构进行排序。
让我们看看如何。
在下面的代码中,我们使用了std :: greater <int>()函数,其功能与std :: less <int>()函数完全相反。
它比较两个参数,并在第一个大于另一个时返回True。
否则返回False。
#include<iostream> #include<algorithm> using namespace std; int main() { //array initialisation int demo[5] = {44, 22, 55, 33, 66}; int len = sizeof(demo)/sizeof(demo[0]); cout<<"Before sorting array : "; for(int i=0; i<len; i++) { cout<<" "<<demo[i]; } std::sort(demo, demo + len, greater<int>());//Sorting demo array cout<<"\n\nAfter sorting array : "; for(int i=0; i<len; i++) { cout<<" "<<demo[i]; } return 0; }
我们还可以将lambda函数用作sort()函数的第三个参数,如下所示。
#include<iostream> #include<algorithm> using namespace std; int main() { //array initialisation int demo[5] = {44, 22, 55, 33, 66}; int len = sizeof(demo)/sizeof(demo[0]); cout<<"Before sorting array : "; for(int i=0; i<len; i++) { cout<<" "<<demo[i]; } std::sort(demo, demo + len, [](int &e1, int &e2){ return e1>e2; });//Sorting demo array cout<<"\n\nAfter sorting array : "; for(int i=0; i<len; i++) { cout<<" "<<demo[i]; } return 0; }
上面的两个示例都生成如下相同的输出。
并成功地按降序对" demo"数组进行排序。
3.按用户定义的顺序排序
std :: sort()
函数的第三个参数(comp)也可以是用户定义的函数,用于定义顺序或者排序。
应该注意,此函数必须返回一个布尔值(" True" /" False")。
例如,在下面的代码段中,我们尝试根据数组元素除以10时产生的余数(使用'%%'运算符)对数组元素进行排序。
#include<iostream> #include<algorithm> using namespace std; //our function bool My_func( int a, int b) { return (a%10)<(b%10); } int main() { //array initialisation int demo[5] = {18, 45, 34, 92, 21}; int len = sizeof(demo)/sizeof(demo[0]); cout<<"Before sorting array : "; for(int i=0; i<len; i++) { cout<<" "<<demo[i]; } std::sort(demo, demo + len, My_func);//Sorting demo array cout<<"\n\nAfter sorting array : "; for(int i=0; i<len; i++) { cout<<" "<<demo[i]; } return 0; }
从上面的输出中可以看到,已经成功地基于(element%10)因子对demo
数组进行了排序。
借助我们的My_func()函数。
C++中std :: sort()的复杂性
sort()函数执行Nlog(N)比较以对N个项目进行排序。
因此,在最坏的情况下,它具有O(Nlog(N))复杂度。