在 C++ std 库中使用 sort()

介绍

今天我们将讨论在 C++ 中的 std 库中的 sort() 函数。

对于基本面而言, ** 排序是系统排序项目的任何过程,这些项目可能是序列的元素或任何 [数据结构]( / 社区 / 教程 / 数据结构 - 算法)的元素。

在 **C++**中,标准库提供了预定义和可用函数 sort() 来执行此排序操作。

std::sort() 函数在 C++ 中

C++中的std::sort()函数是一个内置的函数,用于以特定顺序排序任何形式的数据结构,它在算法头文件中定义。

1void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

在这里,该函数不会返回任何东西. 它只会更新从第一最后迭代或位置的元素/元素. 第三个参数(可选) comp 必须是定义元素将被排序的 **顺序的函数。

sort() 函数使用一个 3折叠的混合排序技术,名为 Introsort. 它是 Quick Sort, Heap Sort 和 Insertion Sort 的组合。

使用 sort() 函数在 C++ 中对数据进行排序

现在我们已经通过了‘sort()’函数的基本知识,让我们在我们的C++程序中使用它来排序一些数据结构(例如 arrays)。

1、按上升顺序排序

如前所述,默认情况下, sort() 函数在未提到 comp 参数时将一组项目排序为 ** ascending** 顺序。

因此,对于下面的示例,我们只通过了第一(开始)和最后(结束)迭代来以上升顺序排列一个数组。

 1#include<iostream>    
 2#include<algorithm>
 3using namespace std;
 4int main()
 5{  
 6    //array initialisation
 7    int demo[5] = {5, 4, 3, 2, 1};
 8
 9    int len = sizeof(demo)/sizeof(demo[0]);
10
11    cout<<"Before sorting array : ";
12    for(int i=0; i<len; i++)
13    {
14        cout<<" "<<demo[i];
15    }
16
17    std::sort(demo, demo + len);//Sorting demo array
18
19    cout<<"\n\nAfter sorting array : ";
20    for(int i=0; i<len; i++)
21    {
22        cout<<" "<<demo[i];
23    }
24    return 0;
25}

出发点:**

Sort1

在这里,demofirst元素的地址,而(demo + len)是给定数组的 最后元素的地址,因此,默认情况下,将 comp视为std::less<int>()函数,则 sort()函数将数组排列为 ** ascending** 顺序。

** 注意:** std::less<int>() 函数比较两个参数,并根据第一个小于第二个参数是否返回 TrueFalse

二、按下落顺序排序

我们还可以通过操纵其第三个参数来对数据结构进行排序,使用 sort() 函数以 descending 顺序排序。

在下面的代码中,我们使用了 std::greater<int>() 函数,该函数与 `std::less()' 函数完全相反。

 1#include<iostream>    
 2#include<algorithm>
 3using namespace std;
 4int main()
 5{  
 6    //array initialisation
 7    int demo[5] = {44, 22, 55, 33, 66};
 8
 9    int len = sizeof(demo)/sizeof(demo[0]);
10
11    cout<<"Before sorting array : ";
12    for(int i=0; i<len; i++)
13    {
14        cout<<" "<<demo[i];
15    }
16
17    std::sort(demo, demo + len, greater<int>());//Sorting demo array
18
19    cout<<"\n\nAfter sorting array : ";
20    for(int i=0; i<len; i++)
21    {
22        cout<<" "<<demo[i];
23    }
24    return 0;
25}

我们还可以使用 lambda 函数作为 sort() 函数的第三参数,如下所示。

 1#include<iostream>    
 2#include<algorithm>
 3using namespace std;
 4int main()
 5{  
 6    //array initialisation
 7    int demo[5] = {44, 22, 55, 33, 66};
 8
 9    int len = sizeof(demo)/sizeof(demo[0]);
10
11    cout<<"Before sorting array : ";
12    for(int i=0; i<len; i++)
13    {
14        cout<<" "<<demo[i];
15    }
16
17    std::sort(demo, demo + len, [](int &e1, int &e2){ return e1>e2; });//Sorting demo array
18
19    cout<<"\n\nAfter sorting array : ";
20    for(int i=0; i<len; i++)
21    {
22        cout<<" "<<demo[i];
23    }
24    return 0;
25}

上面的两种示例都生成相同的输出,如下所示,并成功地将演示数组排序为 下行顺序。

出发点:**

Sort2

3、用用户定义订单进行排序

「std::sort()」函数的第三参数(comp)也可以是定义顺序或排序的 用户定义函数。

应该注意的是,这个函数必须返回一个 boolean值(True/False)。

例如,在下面的代码片段中,我们试图根据它们在以 10(使用%运算符)分割时产生的剩余元素来排序数组元素。

 1#include<iostream>    
 2#include<algorithm>
 3using namespace std;
 4
 5//our function
 6bool My_func( int a, int b)
 7{	
 8    return (a%10)<(b%10);
 9}
10
11int main()
12{  
13    //array initialisation
14    int demo[5] = {18, 45, 34, 92, 21};
15
16    int len = sizeof(demo)/sizeof(demo[0]);
17
18    cout<<"Before sorting array : ";
19    for(int i=0; i<len; i++)
20    {
21        cout<<" "<<demo[i];
22    }
23
24    std::sort(demo, demo + len, My_func);//Sorting demo array
25
26    cout<<"\n\nAfter sorting array : ";
27    for(int i=0; i<len; i++)
28    {
29        cout<<" "<<demo[i];
30    }
31    return 0;
32}

出发点:**

Sort3

正如我们从上面的输出中可以看到的那样,演示数组已成功地根据(element%10)因子进行排序,使用我们的My_func()函数。

std::sort() 在 C++ 中的复杂性

sort() 函数执行 **Nlog(N)**比较来排序 N 项,因此在最坏的情况下,它具有 **O(Nlog(N))**的复杂性。

总结一下

今天,我们了解了在C++标准库中使用和运作的 **sort()**函数。

请注意, sort() 函数也可以用于其他数据结构,如 [矢量]( / 社区 / 教程 / 分类-a-vector-in-c-plus-plus)等。

我们建议通过我们的C + + 教程( / 社区 / 教程 / c-plus-plus)。

对于任何进一步的问题,请自由使用下面的评论。

参考

Published At
Categories with 技术
Tagged with
comments powered by Disqus