qsort 是 C 标准库函数,申明于头文件 <stdlib.h>,基于快速排序实现。
函数原型如下:
base 待排序数组首地址。
num 数组中待排序元素数量。
size 各元素的占用空间大小。
compar 指向函数的指针,根据返回值确定排序的顺序 。
返回值 | 含义 |
---|---|
<0 | p1 指向的元素位于 p2 指向的元素之前 |
0 | p1指向的元素和p2指向的元素相等 |
>0 | p1 指向的元素位于 p2 指向的元素之后 |
使用示例:
运行输出:
sort 是 C++ 标准模板库(STL)中的函数模板,定义于头文件<algorithm>
,所在名字空间为 std。
将范围 [first,last) 中的元素按升序排序。
第一个版本使用 operator< 来比较元素,第二个版本使用 comp 来比较元素。
不保证等效元素保持其原始相对顺序(请参阅 stable_sort )。
函数原型:
first, last 用于指定待排序元素下标,不包含 last。
comp(可选)为接受范围内的两个元素作为参数,并返回可转换为 bool 的值的二元函数。返回 true 表示第一个参数排在第二个参数之前。
使用示例:
运行输出:
qsort 和 sort 都是标准库函数,都可用于排序,但是二者也存在着一些区别:
qsort 是 C 的库函数,sort 是 C++ STL 中的函数模板。
qsort 必须要指定比较函数,而 sort 可以指定,也可以缺省。
sort 比 qsort 更快,因为 C++ 的模板为特定数据类型和特定比较函数生成优化的代码。sort 速度比手动编写的快速排序快 20% 到 50%,比 qsort 快 250% 到 1000%。C 可能是最快的语言,但 qsort 非常慢。
由于内联,C++ sort() 在同等数据上比 qsort() 快得多。默认情况下,整数容器上的 sort() 将被编译为使用 std::less::operator() ,它将被内联,并且 sort() 将直接比较整数。 而 qsort() 通过函数指针进行间接调用比较元素大小,导致编译器无法优化。
sort 适用于所有数据类型和不同的数据容器,例如 C 数组、C++ 向量、C++ 双端队列等以及用户可以编写的其他容器。 这种灵活性在 C 语言中很难实现。
与 qsort 相比,模板化排序更加类型安全,因为它不需要像 qsort 那样通过不安全的 void 指针访问数据项。
综上所述,优先使用 sort。
qsort - cplusplus.com sort - cplusplus.com C qsort() vs C++ sort()