关于qsort
1.qsort是一个库函数,头文件为#include<stdlib.h>
2.qsort函数的声名
void qsort(void *base, size_t num, size_t width, int (*compar)(const void *, const void*))
3.参数的介绍
- base:指向要排列数组的第一个元素的地址;
- num:base指向数组的元素个数;
- width:base指向数组中单个元素多占字节;
- compare:用来比较两个元素的函数;
注意:qsort函数没有任何返回值
1.用qsort对整形数组进行排列
int cmp_int(const void* e1,const void* e2)
{
return *((int*)e1)-*((int*)e2);
}
#include<stdio.h>
int main()
{
int i;
int arr[]={9,8,7,6,5,4,3,2,1};
int sz=sizeof(arr)/sizeof(arr[0]);
qsort(arr,sz,sizeof(arr[0]),cmp_int);
for(i=0;i<sz;i++)
{
printf("%d",arr[i]);
}
}
2.用qsort对字符数组进行排列
int cmp_char(const void* e1,const void* e2)
{
return *((char*)e1)-*((char*)e2);
}
#include<stdio.h>
int main()
{
int i;
int arr[]={'a','c','g','b','d'};
int sz=sizeof(arr)/sizeof(arr[0]);
qsort(arr,sz,sizeof(arr[0]),cmp_int);
for(i=0;i<sz;i++)
{
printf("%c",arr[i]);
}
}
[点击并拖拽以移动]
3.用qsort对结构体进行排序
1.对结构体中的int型数据进行排列
struct stu {
char name[20];
int age;
char tel[20];
};
int cmp_struct(const void* e1, const void* e2)
{
return (struct stu*)e1->age-(struct stu*)->age;
}
int main()
{
struct stu s[] = { { "zhangsan",15,"123456789" },{ "lisi", 16, "147852369" },{ "wangwu",18,"258963147" } };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), (cmp_struct));
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d\n",s[i].age);
}
}
2.对结构体中的字符串进行排列
#include<stdio.h>
#include<string.h>
struct stu {
char name[20];
int age;
char tel[20];
};
int cmp_struct(const void* e1, const void* e2)
{
return strcmp (struct stu*)e1->name,(struct stu*)e2->name;
}
int main()
{
struct stu s[] = { { "zhangsan",15,"123456789" },{ "lisi", 16, "147852369" },{ "wangwu",18,"258963147" } };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), (cmp_struct));
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%s\n",s[i].name);
}
}
[点击并拖拽以移动]