C++ 中 std::sort 和 std::stable_sort() 函数的区别

2025 年 5 月 20 日 | 阅读 4 分钟

在本文中,我们将讨论 C++ 中 std::sort()std::stable_sort() 之间的区别。在讨论它们的区别之前,我们必须先了解 std::sort() 和 std::stable_sort() 的语法、参数和示例。

C++ 中的 std::sort() 函数是什么?

C++ 编程中,std::sort() 函数是 标准模板库 (STL) 中的一个内置函数。它主要用于按所需顺序对范围 [first, last] 内的元素进行排序。它提供了一种简单有效的方法来对 C++ 中的数据进行排序。它也可以通过指定一个返回布尔值的比较函数来进行自定义排序。这个 std::sort() 函数定义在 C++ 的 <algorithm> 头文件中。它只适用于允许随机访问其组件的数据结构,例如 向量数组

语法

它具有以下语法:

参数

  • template< class RandomIter>:这是一个模板声明。
  • void sort( RandomIter first, RandomIter last, comp ): 这是 C++ 中 std::sort 函数模板的函数签名。
    1. RandomIter first:它表示一个指向我们要排序的范围的第一个元素的迭代器。
    2. RandomIter last:它表示一个指向我们要排序的范围的最后一个元素之后的位置的迭代器。
    3. Comp (可选):一个比较范围中两个元素的二元函数、lambda 表达式或函数对象。

示例

让我们举一个例子来说明 C++ 中的 std::sort() 函数。

输出

19 22 37 44 45 55 68   

C++ 中的 std::stable_sort() 函数是什么?

std::stable_sort() 函数也用于按升序对范围 [first, last] 内的元素进行排序。它与 std::sort() 函数类似,但它会保留相等元素的期望顺序。这个 std::stable_sort() 函数定义在 C++ 的 <algorithm> 头文件中。

语法

它具有以下语法:

另一个语法是

参数

  • template< class RandomIter>:这是一个模板声明。
  • void sort( RandomIter first, RandomIter last, comp ): 这是 C++ 中 std::stable_sort 函数模板的函数签名。
    1. RandomIter first:它表示一个指向范围中第一个元素的迭代器。
    2. RandomIter last:它表示一个指向范围中最后一个元素之后的位置的迭代器。
    3. Comp:它接受两个参数,如果两个输入按顺序排列,则返回 true;否则返回 false。

返回值

它不返回任何值。

示例

让我们举一个例子来说明 C++ 中的 std::stable_sort() 函数。

输出

Sorted Employees:
Bob (Dept 1)
David (Dept 1)
Alice (Dept 2)
Charlie (Dept 2)
Grace (Dept 2)
Eve (Dept 3)
Frank (Dept 3)   

C++ 中 std::sort 和 std::stable_sort() 函数的主要区别

Difference between std::sort and std::stable_sort() function in C++

C++ 中的 std::sort()std::stable_sort() 之间有几个关键区别。一些主要区别如下:

特点Std::sort()Std::stable_sort()
稳定性它是不稳定的,这意味着不保证相等元素的相对顺序会被保留。它保证会按期望的顺序保留相等元素。
性能由于约束较少,它通常比 std::stable_sort() 更快。它使用多种排序算法,包括快速排序、堆排序、插入排序和内省排序算法的组合。由于额外的空间分配和稳定性开销,它比 std::sort() 慢。
用例当不需要稳定性且要求性能时,它很适用。当稳定性很重要时,它很适用。
算法类型它主要使用快速排序算法的变体。它主要使用基于归并排序的算法。
实现依赖性它主要依赖于元素比较。它主要依赖于元素比较,但保证稳定的输出。
时间复杂度它的平均时间复杂度为 O(n logn)。
最坏情况复杂度:O(n2)
在最坏情况下,它的时间复杂度为 O(n log2n)。
空间复杂度它需要 O(1) 的额外空间。它需要 O(n) 的额外空间。

结论

总之,std::sort()std::stable_sort() 函数是 C++ 中的重要函数。这两个函数都用于按期望的顺序对元素进行排序。理解这些算法之间的差异有助于为我们的需求选择最佳算法。它能确保我们程序的效率和正确性。我们可以根据我们的需求选择最佳的算法。