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



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

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

如果不需要,则算法更简单,有时更快和/或更节省内存。
一个稳定排序算法的典型例子是归并排序。

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

O (N·日志<子> 2子>

空间是另一个需要考虑的问题:qsort是在适当的位置完成的,这意味着不需要额外的内存分配。另一方面,stable_sort尝试临时分配大小等于被排序数组的大小。

这个函数尝试分配一个大小与待排序序列相等的临时缓冲区。如果分配失败,则选择效率较低的算法。

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

如果是这样的话,我们为什么要使用qsort呢?

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

C的qsort()没有被指定为使用快速排序算法,也没有被要求是稳定的,也没有被要求是非稳定的。

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

相关内容

  • 没有找到相关文章

最新更新