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 << "Before sorting" << endl;
for (int i=0; i<num; i++)
cout << arr[i] << " ";
qsort(arr,num,sizeof(int),compare);
cout << endl << endl;
cout << "After sorting" << endl;
for (int i=0; i<num; i++)
cout << arr[i] << " ";
return 0;
}
运行程序后,输出将是
Before sorting 9 4 19 2 7 9 5 15 23 3 After sorting 2 3 4 5 7 9 9 15 19 23