C++ 算法 stable_sort()

2024年8月30日 | 5分钟阅读

C++ 算法 stable_sort() 函数用于将范围 [first, last) 中的元素按升序排序,与 sort 类似,但保持等价元素的相对顺序。

第一个版本使用运算符 < 比较元素,第二个版本使用 comp 比较元素。

语法

参数

first:一个双向迭代器,指向要排序范围中的第一个元素。

last:一个双向迭代器,指向要排序范围中最后一个元素的后一个位置。

comp:一个用户定义的二元谓词函数,接受两个参数,如果这两个参数有序则返回 true,否则返回 false。它遵循严格弱序来对元素进行排序。

返回值

复杂度

运行时复杂度取决于可用内存量。

如果有足够的额外内存可用,则复杂度与 first 和 last 之间的距离呈线性关系。执行的元素比较次数最多为 N*log2(N),其中 N = last - first。

如果没有额外内存可用,则复杂度与 first 和 last 之间的距离呈多线性关系。执行的元素比较次数最多为 N*log22(N),其中 N = last - first。

数据竞争

范围 [first, last) 中的对象被修改。

异常

如果任何元素比较、元素交换或迭代器操作抛出异常,此函数将抛出异常。

请注意,无效参数会导致未定义行为。

示例 1

让我们看一个简单的例子来演示 stable_sort() 的用法

输出

Before sorting: 3 1 4 2 5 
After sorting:  1 2 3 4 5

示例 2

让我们看另一个简单示例

输出

Age : Name 
-----------
23 : Bob
58 : Robin
60 : Devid

示例 3

让我们看另一个简单示例

输出

Stable Sort by name
Name  	Sec	Group
-------------------------
Aman	3	B
Anjali	3	A
Bob	4	C
Chinu  	3	A
Deep 	4	B
Faizal 	3	A
Nikita 	1	A
Rohit 	2	A

Stable Sort by section
Name  	Sec	Group
-------------------------
Nikita 	1	A
Rohit 	2	A
Aman	3	B
Anjali	3	A
Chinu  	3	A
Faizal 	3	A
Bob	4	C
Deep 	4	B

示例 4

让我们看另一个简单示例

输出

Original vector v1 = ( 0 2 4 6 8 10 0 2 4 6 8 10 )
Sorted vector v1 = ( 0 0 2 2 4 4 6 6 8 8 10 10 )
Resorted (greater) vector v1 = ( 10 10 8 8 6 6 4 4 2 2 0 0 )
Resorted (UDgreater) vector v1 = ( 10 10 8 8 6 6 4 4 2 2 0 0 )

下一主题C++ 算法