请原谅信息的简洁。
我有一系列记录。我想按降序排序w.r.t.其中一个关键。记录的密钥不是唯一的。
比较qsort的功能:
int cmp(const record* rec1, const record* rec2)
{
return rec2->key - rec1->key;
}
比较std :: sort的函数:
bool operator()(const record& rec1, const record& rec2)
{
return rec1.key > rec2.key;
}
两个版本都会给出相同的结果吗?我不确定sort / qsort在键相等时是否表现相同。
答案 0 :(得分:3)
没有这样的保证。
如果
comp
表示两个元素相同,则其顺序未指定。
不保证保留相等元素的顺序。
如果需要保留相等元素的顺序,则需要稳定的排序算法。 std::stable_sort
稳定。
或者只需添加更多键进行排序,以便没有元素比较相等。
答案 1 :(得分:2)
没有。这些种类都不能保证stable种类。比较相等的元素可能不会使用任何排序以相同的顺序出现。
[alg.sort]中也没有任何内容可以保证它们使用与该算法相同的算法/实现。实际上,由于C ++ 11 std::sort 保证为O(n log n),而尽管其名称std::qsort甚至不能保证是快速排序更不用说具有任何特定的时间复杂度(这意味着Bogosort是一个符合qsort
的实现)
由于您在评论中指定您正在使用GCC并且对该平台使用相同排序感兴趣,因此答案仍为“否”。
对于qsort
,它来自您的GCC版本使用的任何libc。