📜  C++ STL中的sort()vs.partial_sort()vs.nth_element()+ sort()(1)

📅  最后修改于: 2023-12-03 14:39:52.130000             🧑  作者: Mango

C++ STL中的sort()、partial_sort()、nth_element()+ sort()

在C++的STL中,有三个排序相关函数:sort()、partial_sort()和nth_element()+sort()。这三个函数有着不同的使用场景和时间复杂度。接下来我们将对这三个函数进行详细介绍。

sort()

sort()函数是STL中最常用的排序函数之一。它的用法非常简单,只需要传入待排序数组的首地址和末地址即可。

#include <algorithm>
using namespace std;

int a[] = {5, 3, 1, 4, 2};
sort(a, a + 5);

sort函数默认按升序排列,可以使用第三个参数来自定义排序方式。sort()函数的时间复杂度是O(nlogn),因此它适用于较小数据集的排序操作。

partial_sort()

partial_sort()函数可以对一部分元素进行排序。它可以将数组中前k个最小的元素排序出来,同时其余元素不进行排序并保持原样。

#include <algorithm>
using namespace std;

int a[] = {5, 3, 1, 4, 2};
partial_sort(a, a + 3, a + 5);

在上面的例子中,我们将数组中前3个最小的元素排序出来。partial_sort()函数的时间复杂度是O(nlogk),因此它适用于需要获取一部分最小值的操作。

nth_element()+ sort()

nth_element()函数可以将数组中第k小的元素移动到第k个位置上。然后我们可以使用sort()函数对前k个元素进行排序。

#include <algorithm>
using namespace std;

int a[] = {5, 3, 1, 4, 2};
nth_element(a, a + 2, a + 5);
sort(a, a + 3);

在上面的例子中,我们将数组中第3小的元素移动到第3个位置上,然后对前3个元素进行了排序。nth_element()+ sort()函数的时间复杂度是O(nlogk),因此它适用于需要获取一部分最小值并对其进行排序的操作。

总结

通过上面的介绍,我们可以看到这三个函数在不同的场景中有着不同的应用。根据数据集大小和所需排序元素数量来选择使用对应的函数,以达到最优的时间复杂度。