从各种来源引用我知道内置的C函数,stable_sort是稳定的,但qsort是不稳定的。如果是这种情况,我们为什么要使用qsort呢?这不是多余的吗?为什么不使用stable_sort?
答案 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()
没有关于速度,内存效率和数据稳定性的规范,因此通常使用针对目标平台的实用方法进行编码。在嵌入式平台上,内存空间通常比速度更重要。在桌面上,速度可能是最重要的。