C语言快速排序函数用法(qsort)
简介
快速排序是一种常见的排序算法,而C语言中的qsort函数则是一种快速排序的实现。使用qsort函数,我们无需自己编写快速排序算法的代码,只需要提供一个排序所需的比较函数即可。使用qsort函数,既可以方便的排序数组,还可以排序链表等数据结构。
函数原型
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *));
函数参数:
base
:表示待排序数组的头指针。nitems
:表示待排序数组的元素个数。size
:表示待排序数组元素的大小,以字节为单位。compar
:表示排序所需的比较函数指针。
比较函数
compar
指针指向的函数用于比较两个待排序元素的大小。需要注意的是,此函数应满足以下条件:
- 若
a
小于b
,则返回一个负数。 - 若
a
等于b
,则返回0。 - 若
a
大于b
,则返回一个正数。
以下是一个比较函数的示例,该函数用于比较两个整数的大小:
int cmpfunc(const void *a, const void *b) {
return (*(int *)a - *(int *)b);
}
示例说明
示例1:对整数数组进行排序
以下是对整数数组进行排序的示例:
#include <stdio.h>
#include <stdlib.h>
int cmpfunc(const void *a, const void *b) {
return (*(int *)a - *(int *)b);
}
int main () {
int arr[] = {10, 5, 3, 9, 1};
int n = sizeof(arr) / sizeof(arr[0]);
int i;
qsort(arr, n, sizeof(int), cmpfunc);
for(i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
输出结果为:1 3 5 9 10
示例2:对结构体数组进行排序
以下是对结构体数组进行排序的示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[20];
int age;
} Person;
int cmpfunc(const void *a, const void *b) {
return strcmp(((Person *)a)->name, ((Person *)b)->name);
}
int main () {
Person arr[] = {{"Mike", 12}, {"Tom", 15}, {"John", 10}};
int n = sizeof(arr) / sizeof(arr[0]);
int i;
qsort(arr, n, sizeof(Person), cmpfunc);
for(i = 0; i < n; i++) {
printf("%s %d\n", arr[i].name, arr[i].age);
}
return 0;
}
输出结果为:
John 10
Mike 12
Tom 15
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言快速排序函数用法(qsort) - Python技术站