一、qsort函数的基本介绍
函数名: qsort
头文件: <stdlib.h>
函数原型: qsort(void* base , size_t num , size_t size , int (* compar)(const void*, const void*));
功能: 对传入的任何数据进行排序,使其变成有序数列
参数: void* base base指向待排序的第一个元素
size_t num 待排序的元素个数
size_t size 待排序的数组元素的大小,单位是字节
int (compar)(const void, const void*)
compar是一个函数指针,指向的函数能够比较2个元素
返回值: 没有返回值
二、程序例1
使用 qsort 函数对无序整型数组 arr 进行快速排序 |
#include <stdio.h>
#include <stdlib.h>
//计算
int cmp_int(const void* e1, const void* e2)
{
return *(int*)e1 - *(int*)e2;
}
//打印
void print_arr(int arr[],int sz)
{
int i = 0;
for ( i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
//测试整型
test1()
{
int arr[] = { 3,1,5,2,4,8,7,6,9,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp_int);
print_arr(arr, sz);
}
int main()
{
test1();
return 0;
}
程序例2
使用 qsort 函数对 结构体 数据进行快速排序 |
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//年龄计算函数
int cmp_stu_by_age(const void* e1,const void* e2)
{
return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}
//名字计算函数
int cmp_stu_by_name(const void* e1, const void* e2)
{
return strcmp(((struct Stu*)e1)->name,((struct Stu*)e2)->name);
}
//结构体数据
struct Stu
{
char name[20];
int age;
};
//测试结构体数据
test2()
{
struct Stu s[] = { {"zhangsan",18},{"lisi",30},{"wangwu",25} };
int sz = sizeof(s) / sizeof(s[0]);
//qsort(s, sz, sizeof(s[0]), cmp_stu_by_age); //测试年龄比大小
qsort(s, sz, sizeof(s[0]), cmp_stu_by_name); //测试名字比大小
}
int main()
{
test2();
return 0;
}
最后
兄弟们哪里不会的可以在评论区问我,我写错的地方请大佬指出!! |