std::qsort() 算法
- C++98 起
// (1)
void qsort( void *ptr, std::size_t count, std::size_t size, cpp_compare_pred comp );
// (2)
void qsort( void *ptr, std::size_t count, std::size_t size, c_compare_pred comp );
当仅用于说明的类型定义如下时
extern "C++" using cpp_compare_pred = int(const void*, const void*);
extern "C" using c_compare_pred = int(const void*, const void*);
以升序对 ptr
指向的给定数组进行排序。
该数组包含 count
个 size
字节的元素。comp
指向的函数用于对象比较。
注意
如果 comp
指示两个元素等效,则它们的顺序未指定。
未定义行为
如果数组元素的类型不是 PODType (直到 C++11)TriviallyCopyable (自 C++11 起) 类型,则行为未定义
.参数
ptr | 指向要排序数组的指针。 |
count | 数组中的元素数量。 |
size | 数组中每个元素的大小(以字节为单位)。 |
comp | 比较函数,返回
比较函数的签名应等效于以下内容
|
返回值
(无)
复杂度
未指定。
异常
(无)
备注
尽管有这个名称,C++、C 和 POSIX 标准不要求此函数使用快速排序实现,也不做任何复杂性或稳定性保证。
C++ 标准库提供的两个重载是不同的,因为参数 comp
的类型不同(语言链接是其类型的一部分)。
示例
Main.cpp
#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