跳到主要内容

C++ qsort() 函数

qsort() 函数使用比较函数来决定哪个元素比另一个小/大。

qsort() 函数原型

void qsort (void* base, size_t num, size_t size, int (*compare)(const void*,const void*));

该函数定义在 <cstdlib> 头文件中。

qsort() 函数按升序对 base 指向的数组进行排序。数组包含 num 个元素,每个元素 size 字节大小。

compare 指向的函数用于比较数组中的两个元素。该函数按升序修改数组的内容。

然而,如果两个或多个元素相等,它们的顺序是未定义的。

qsort() 参数

  • base:指向要排序的数组第一个元素的指针
  • num:数组中的元素数量
  • size:数组中每个元素的字节大小
  • compare:指向一个比较两个元素的函数的指针。它返回
    • 如果第一个参数小于第二个,则返回负整数
    • 如果第一个参数大于第二个,则返回正整数
    • 如果两个参数相等,则返回零

比较函数的原型如下:

int compare(const void* a, const void* b);

qsort() 返回值

qsort() 函数不返回任何内容。经过排序的数组由 base 指向。

示例:qsort() 函数如何工作?

#include <iostream>
#include <cstdlib>
using namespace std;

int compare(const void* a, const void* b)
{
const int* x = (int*) a;
const int* y = (int*) b;

if (*x > *y)
return 1;
else if (*x < *y)
return -1;

return 0;
}

int main()
{
const int num = 10;
int arr[num] = {9, 4, 19, 2, 7, 9, 5, 15, 23, 3};

cout << "排序前" << endl;
for (int i=0; i<num; i++)
cout << arr[i] << " ";

qsort(arr, num, sizeof(int), compare);
cout << endl << endl;
cout << "排序后" << endl;

for (int i=0; i<num; i++)
cout << arr[i] << " ";

return 0;
}

当你运行程序时,输出将是:

排序前
9 4 19 2 7 9 5 15 23 3
排序后
2 3 4 5 7 9 9 15 19 23