跳到主要内容

std::qsort() 算法

// (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 指向的给定数组进行排序。

该数组包含 countsize 字节的元素。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 的类型不同(语言链接是其类型的一部分)。

示例

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
本文源自此 CppReference 页面。它可能为了改进或编辑者偏好而进行了修改。点击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。

std::qsort() 算法

// (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 指向的给定数组进行排序。

该数组包含 countsize 字节的元素。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 的类型不同(语言链接是其类型的一部分)。

示例

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
本文源自此 CppReference 页面。它可能为了改进或编辑者偏好而进行了修改。点击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。