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

时间:2015-09-21 11:37:04

标签: c++ sorting qsort stable-sort

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

3 个答案:

答案 0 :(得分:9)

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

如果不需要,算法更简单,有时更快和/或更高的内存效率 稳定排序算法的典型示例是merge sort

答案 1 :(得分:7)

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

  

O(N·登录<子> 2 (N))。如果有额外的内存,则复杂度为O(N·log(N))。

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

  

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

来自rcgldr评论的注意事项:std::stable_sort的HP / Microsoft实施使用了序列大小1/2的临时缓冲区。下半部分是排序到序列的后半部分,前半部分进入临时缓冲区,然后临时缓冲区和序列的后半部分合并回序列。

答案 2 :(得分:0)

  

如果是这种情况,我们为什么要使用qsort?

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

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

经常使用

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