qsort
一.首先介绍什么是qsort
qsort()函数(quick sort)是八大排序算法中的快速排序,能够排序任意数据类型的数组其中包括整形,浮点型,字符串甚至还有自定义的结构体类型。
1.1参数的含义
1.第一个元素base
我们要排序一组数据,首先我们需要找到这组数据在哪,base是指向待排序的第一个元素,就是起始地址
2.第二个元素base
base就是待排序的元素个数
3.第三个元素size
size就是待排序元素的大小
4.第四个元素compar
compar是一个函数指针,指向的函数可以比较两个元素
二.qsort的使用
2.1.1头文件
如果需要使用qsort函数就需要引用
#include <stdlib.h>
头文件
2.1.2实现函数的参数compar
qsort函数给cmp函数规定了特定的参数。因此我们设计cmp函数时要按照其规定使用
int cmp_int(const void* e1, const void* e2)
这里可以比较的数据有整型,浮点型,字符串,还有结构体等
2.1.3比较整形变量
int cmp_int(const void* e1, const void* e2)
{
return *(int*)e1 - *(int*)e2;
}
2.1.4比较浮点形变量
int cmp_float(const void* e1, const void* e2)
{
return (int)(*(float*)e1 - *(float*)e2);
}
2.1.5比较字符串变量
int cmp_str_size(const void* e1, const void* e2)
{
return strcmp((char*)e1,(char*)e2);
}
2.1.6比较结构体变量
int cmp_by_age(const void*e1, const void*e2)
{
return (int)(((stu*)e1)->weight - ((stu*)e2)->weight);
}
三.案例
3.1案例代码
int cmp_int(const void* e1, const void* e2)
{
return *(int*)e1 - *(int*)e2;
}
void print_arr(int arr[], int sz)
{
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
//test测试排序结构体
struct stu
{
char name[20];
int age;
};
//按照年零比较
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);
}
void test2()
{
struct stu s[] = { {"zhangsan",20},{"lishi",10},{"wangwu",60} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
}
void test1()
{
int arr[] = { 3,6,1,9,7,5,4,8 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[1]), cmp_int);
print_arr(arr, sz);
}
int main()
{
test2();
return 0;
}
这里是按照姓名比较也就是字符串比较,
原来的姓名第一个是zhangsan
,现在看调试结果
第一个是lishi
,是按照首字母的大小顺序排序的。