std::qsort
来自 cppreference.cn
定义于头文件 <cstdlib> |
||
void qsort( void *ptr, std::size_t count, std::size_t size, /* c-compare-pred */* comp ); |
(1) | |
extern "C" using /* c-compare-pred */ = int(const void*, const void*); extern "C++" using /* compare-pred */ = int(const void*, const void*); |
(2) | (仅为演示目的*) |
对 ptr 指向的给定数组进行升序排序。 数组包含 count 个 size 字节的元素。 由 comp 指向的函数用于对象比较。
如果 comp 指示两个元素等效,则它们的顺序是未指定的。
如果数组元素的类型不是 PODType(直到 C++11)TriviallyCopyable 类型(自 C++11 起),则行为是未定义的。
内容 |
[编辑] 参数
ptr | - | 要排序的数组的指针 |
count | - | 数组中元素的数量 |
size | - | 数组中每个元素的字节大小 |
comp | - | 比较函数,如果第一个参数小于第二个参数,则返回负整数值;如果第一个参数大于第二个参数,则返回正整数值;如果参数等效,则返回零。 比较函数的签名应等效于以下内容 int cmp(const void *a, const void *b); 该函数不得修改传递给它的对象,并且在为相同的对象调用时,无论它们在数组中的位置如何,都必须返回一致的结果。 |
[编辑] 返回值
(无)
[编辑] 注解
尽管名称如此,C++、C 和 POSIX 标准不要求此函数使用 快速排序 实现,也不做任何复杂度或稳定性保证。
C++ 标准库提供的两个重载是不同的,因为参数 comp 的类型是不同的(语言链接 是其类型的一部分)。
[编辑] 示例
以下代码使用 qsort()
对整数数组进行排序
运行此代码
#include <array> #include <climits> #include <compare> #include <cstdlib> #include <iostream> int main() { std::array a{-2, 99, 0, -743, INT_MAX, 2, INT_MIN, 4}; std::qsort ( a.data(), a.size(), sizeof(decltype(a)::value_type), [](const void* x, const void* y) { const int arg1 = *static_cast<const int*>(x); const int arg2 = *static_cast<const int*>(y); const auto cmp = arg1 <=> arg2; if (cmp < 0) return -1; if (cmp > 0) return 1; return 0; } ); for (int ai : a) std::cout << ai << ' '; std::cout << '\n'; }
输出
-2147483648 -743 -2 0 2 4 99 2147483647
[编辑] 缺陷报告
以下行为更改缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确的行为 |
---|---|---|---|
LWG 405 | C++98 | 数组的元素可以具有任何类型 | 限制为 PODType |
[编辑] 参见
在数组中搜索未指定类型的元素 (函数) | |
将范围排序为升序 (函数模板) | |
(C++11)(在 C++26 中已弃用) |
检查类型是否是平凡的 (类模板) |
C 文档 关于 qsort
|