c语言中“qsort函数”和“结构体成员访问变量”
qsort函数:
qsort是c语言中的库函数,这个函数是对数据进行排序(对任意)
冒泡排序中排列整数顺序用的函数只适用于整形,而qsort函数适用与所有数据
排序算法
冒泡排序
插入
选择
快速
void qsort{
void * base; //base指向的排序数组的第一个元素的指针
size_t num; //base指向数组中元素的个数
size_t size; //base指向数组中一个元素的大小,单位是字节。
int (*cmp)(const void*,const void*);
};
排列浮点型数组,字符串,结构体:不同的是两个元素之间的比较方式不同。
两个字符串的比较大小不能使用> ,>=, <, <=, !=, ==,应该有strcmp。
strcmp函数不是比较字符串的长度,而是对应字符所占字节的大小。
//先测试qsort来排序整形
void test1(){
int arr[] = {1 2 4 6 7 8 9 43 }
int sz=sizeof(arr) / sizeof(arr[0]);
qsort (arr , sz , sizeof(arr[0]) , cmp_int);
print_arr();
}
对函数返回值有要求,比较两个p1,p2的整型
int cmp_int(const void*p1,const void *p2){
return *(int*)p1 - *(int*)p2; //直接比较两个整数的大小了
}
比较两个结构体:
张三 李四
20 35
185 170 是比较年龄还是身高呢?
qsort给了一个函数指针,来比较结构体。
//用test2来排序结构体数据
Struct Stu{
char name[20]; //名字是字符串
int age; //字符串比较用strcmp函数
}
//按照名字来比较
p1强制类型转换,才可以用。需要包含头文件#include<string.h>
void test2(){
struct Stu arr[]={{"zhangsan ",20},{"lisi",35},{"wangwu",18};
int sz=sizeof(arr)/sizeof(arr[0]);
qsort(arr , sz , sizeof(arr[0]) , com_stu_by_name);
}
int cmp_stu_by_name(const void *p1,const void *p2){
return strcmp(((struct stu*)p1->name,((struct stu*)p2)->name);
}
//按照年龄进行访问
void test3(){
struct Stu arr[]={{"zhangsan ",20},{"lisi",35},{"wangwu",18};
int sz=sizeof(arr)/sizeof(arr[0]);
qsort(arr , sz , sizeof(arr[0]) , com_stu_by_age);
}
int cmp_stu_by_age(const void *p1,const void *p2){
return strcmp(((struct stu*)p1->age,((struct stu*)p2)->age);
}
结构体成员访问变量
struct Stu{
char name[20];
int age;
}
int main(){
struct Stu s={"zhangsan",20};
printf("%s %d\n",s.name,s.age);
struct Stu *s=&s; // 结构体成员访问操作符:
printf("%s %d\n",(*ps).name,(*ps).age); // . :结构体变量 . 成员名
pritnf("%s %d\n",ps->name,ps->age); //->: 结构体指针->成员名
return 0;
}
原文地址:https://blog.csdn.net/2401_83201682/article/details/142420915
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!