C 的 qsort() 与 C++ 的 sort()
在这里,我们将了解 C 中的 qsort() 和 C++ 中的 sort() 之间的区别。
C 提供了 qsort() 函数,可用于对数组进行排序。该函数的参数和语法如下所示。
void qsort(void *base, size_t num, size_t size, int (*comparator) (const void*, const void*));
此函数获取数组的基地址、数组的元素数量、数组中每个项目的尺寸以及一个比较器函数。
C++ 提供了 sort() 函数。它位于 C++ STL 中。参数和语法如下所示。
void sort(T first, T last, Compare c);
这里不保证重复元素的顺序会被保留。为此,我们可以使用 C++ STL 提供的 stable_sort。
qsort() 和 sort() 之间的区别
C 中的 qsort() | C++ 中的 sort() |
---|---|
它使用快速排序算法。 | 它使用 introsort。这是一种混合排序算法。不同的实现使用不同的算法。GNU C++ STL 使用三部分混合排序。Introsort、快速排序和插入排序。 |
C 标准没有讨论此排序算法的复杂度。 | 在这种情况下,C++11 sort() 在最坏情况下复杂度为 O(n logn)。某些早期版本的 sort() 在最坏情况下为 O(n2),在平均情况下为 O(nlogn)。 |
此排序的运行时间比 sort() 长。 | 运行时间比 qsort() 短。 |
qsort() 对于不同类型的数据不灵活。 | sort() 比较灵活。它可以对 C 数组、C++ 向量、C++ 双端队列以及其他一些容器进行排序。 |
此排序不太类型安全。它使用不安全的 void 指针来访问数据。 | 此排序技术更安全。它不需要任何不安全的 void 指针来访问数据。 |
广告