内置qsort函数和稳定排序函数有什么区别?

What is the difference between inbuilt qsort function and stable sort function?

从引用的各种来源我知道内置的 C 函数 stable_sort 是稳定的,但 qsort 是不稳定的。如果是这样,我们为什么还要使用 qsort?不是多余的吗?为什么不使用 stable_sort 呢?

稳定排序意味着相等元素的顺序得以保留。这并不总是必需的。

如果不需要,算法更简单,有时更快and/or更节省内存。
稳定排序算法的典型例子是merge sort.

选择快速排序而不是稳定排序的原因主要是速度:qsort 通常比 stable_sort 快,这不足为奇,因为 stable_sort 具有更强的保证。

O(N·log2(N)). If additional memory is available, then the complexity is O(N·log(N)).

Space 是另一个考虑因素:qsort 是就地完成的,这意味着不需要额外的内存分配。另一方面,stable_sort 尝试临时分配大小等于正在排序的数组。

This function attempts to allocate a temporary buffer equal in size to the sequence to be sorted. If the allocation fails, the less efficient algorithm is chosen.

来自 rcgldr 的注释:std::stable_sort 的 HP/Microsoft 实现使用了序列大小的 1/2 的临时缓冲区.后半部分排序到序列的后半部分,前半部分进入临时缓冲区,然后临时缓冲区和序列的后半部分合并回序列

If that is the case why do we use qsort at all?

stable_sort() 不是标准 C 的一部分。qsort() 是标准 C 的一部分。

C的qsort()未指定使用快速排序算法,既不要求稳定也不要求不稳定。

qsort() 经常被使用,因为它是最便携的。由于 qsort() 没有关于速度、内存效率和数据稳定性的规范,因此通常使用针对目标平台的实用方法进行编码。在嵌入式平台上,内存 space 通常比速度更重要。在台式机上,速度可能是最重要的。