qsort()
函数和 sort()
函数实现排序功能,前者是 C 语言内容,后者是 C++ 内容,下面逐一讲解。
qsort()
先来看一个对数组 arr
排序的例子。qsort()
函数在 stdlib.h
库中,使用时要包含该库文件。
#include <stdio.h>
#include <stdlib.h>
int cmp1(int * a, int * b)
{
return *a - *b;
}
int main()
{
int arr[5] = {
3, 1, 5, 2, 4};
qsort(a, 5, sizeof(int), cmp1);
int i;
for (i = 0; i < 5; i++)
printf("%i ", a[i]);
return 0;
}
qsort()
函数有 4 个参数。第 1 个参数表示要排序的数组地址,这里参数为 arr
,表示对数组 arr
排序。第 2 个参数表示要排序的元素个数,数组里有 5 个元素,所以为 5。第 3 个参数表示每个元素的大小(单位字节),通过 sizeof()
运算符计算 int
类型的字节数。第 4 个参数表示比较函数,形参为指针类型,返回值小于 0,表示 a
要在 b
的左侧,也即从小到大排序;大于 0 则相反;等于 0 顺序不确定。
假设对结构体 arr_s
排序,优先按照结构体中第 1 个元素大小排序,当第 1 个元素大小相等时,按第 2 个元素大小排序。
struct node
{
int v1;
int v2;
};
int cmp2(struct node * s1, struct node * s2)
{
if (s1->v1 != s2->v1)
return s1->v1 - s2->v1;
return s1->v2 - s2->v2;
}
int main()
{
struct node arr_s[5] = {
{
2, 3}, {
1, 2}, {
2, 2}, {
3, 2}, {
1, 1} };
qsort(arr_s, 5, sizeof