一、qsort
1.库函数qsort
qsort是库函数,直接可以用来排序数据,底层使用的是快速排序。
qsort函数可以排序任意类型的数据。
2.头文件
#include<stdlib.h>
3.参数讲解
void*类型的指针是无具体类型的指针,这种类型的指针的不能直接解引用,也不能进行加减整数的运算,它的作用是接收任何类型的地址。
二、qsort函数排序整型数据
#include<stdio.h>
#include<stdlib.h>
int int_cmp(const void* p1, const void* p2)
{
//第一种方式
//if (*(int*)p1 > *(int*)p2)
// return 1;
//else if (*(int*)p1 == *(int*)p2)
// return 0;
//else
// return -1;
//第二种方式
return (*(int*)p1 - *(int*)p2);
}
int main()
{
int arr[10] = { 2,4,6,8,0,9,7,5,3,1 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(int), int_cmp);
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
三、qsort函数排序结构体数据
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Stu
{
char name[20];
int age;
};
//按照年龄比较
int cmp_stu_by_age(const void* p1, const void* p2)
{
return ((struct Stu*)p1)->age - ((struct Stu*)p2)->age;
}
//按照名字比较
int cmp_stu_by_name(const void* p1, const void* p2)
{
return strcmp(((struct Stu*)p1)->name, ((struct Stu*)p2)->name);
}
//按照年龄比较
void test1()
{
struct Stu s[] = { {"zahngsan",20},{"lisi",30},{"wangwu",15} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), cmp_stu_by_age);
for (int i = 0; i < sz; i++)
{
printf("%d ", s[i].age);
}
printf("\n");
}
//按照名字比较
void test2()
{
struct Stu s[] = { {"zahngsan",20},{"lisi",30},{"wangwu",15} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
for (int i = 0; i < sz; i++)
{
printf("%s ",s[i].name);
}
printf("\n");
}
int main()
{
test1();
test2();
return 0;
}