网站主机ip查询,网络营销顾问是什么,学校网站建设哪家好,网站广告销售怎们做目录
简介 头文件
编辑 函数原型#xff1a;
参数函数如何写#xff1a;
参数函数要求#xff1a;
qsort对整性数据的排序#xff1a;
qsort对字符型数据的排序#xff1a;
对结构体类型的内部元素排序#xff1a; 函数的底层是以快速排序实现的 但是本文不深入…目录
简介 头文件
编辑 函数原型
参数函数如何写
参数函数要求
qsort对整性数据的排序
qsort对字符型数据的排序
对结构体类型的内部元素排序 函数的底层是以快速排序实现的 但是本文不深入探讨快速排序是如何进行的你可以从上面的动图可以有个大致了解。 一简介
qsort函数quick sort是八大排序算法中的快速排序能够排序任意数据类型的数组其中包括整形浮点型字符串甚至还有自定义的结构体类型。 二头文件stdlib.h 三函数原型
void qsort (void* base,//要排序的对象的第一个元素的首地址size_t num, //对象的个数size_t size,//每一个对象的大小 Size in bytesint (*compar)(const void*,const void*));//Pointer to a function that compares two elements.并且这个函数要自己写
四参数函数如何写 4.1参数函数要求
必须与qsort函数的第四个参数的函数指针的类型相同 两个参数是两个空类型的指针 返回值为整形对于元素来说 如果值小于0第一个小于第二个 如果值等于0第一个等于第二个 如果值大于0第一个大于第二个 这些比较都是以你定义的函数为标准而比较出来的
五具体实例
5.1 qsort对整性数据的排序 //两个整形元素比较可以用来比较
int in_cmp(const void* a,const void* b)
{return *((int*)a) - *((int*)b);//void*不可直接解引用
}
int main1()
{int arr[8] {5,8,9,4,3,2,8,1};qsort(arr,sizeof(arr)/sizeof(arr[0]),sizeof(int),in_cmp);for(int i 0;i 8;i){printf(%d ,arr[i]);}return 0;
} 着重点 1.qsort函数第四个参数函数指针的类型与库函数完全一致 2.传入的元素的个数每个元素的大小都可以借助sizeof操作符实现 3.其余注意写在代码注释中 5.2 qsort对字符型数据的排序 //比较两个字符字符在内存中以ASCII、码存储可用比较int ch_cmp(const void* ach,const void* bch)
{return *(char*)ach - *(char*)bch;//强制类型转化为char*
}
int main2()
{char *str hisndksni;//str为字符串常量不能被改变char p[10];//可以创建字符数组把str内容copy过来memcpy(p,str,10);int len strlen(str);qsort(p,len,sizeof(char),ch_cmp);printf(%s,p);return 0;
}注重点 1.对字符串排序结尾的\0可忽略所以可用strlen计算元素的个数 2.字符串常量不能被改变初始化时要注意 5.3 对结构体类型的内部元素排序 struct stu
{int score;char* name;int hight;
};int stu_cmp_by_score(const void* p1,const void* p2)
{return ((struct stu*)p1)-score - ((struct stu*)p2)-score;
}
int main()
{struct stu arr[] {{90,zhangsan,175},{88,lisi,180}};int sz1 sizeof(arr)/sizeof(arr[0]);qsort(arr,sz1,sizeof(arr[0]),stu_cmp_by_score);for(int i 0;i sz1;i){printf(%d ,arr[i].score);}return 0;
} 1.结构体指针写完整 2.适当的用括号让自己的代码逻辑更加清晰 cplusplus的qort函数https://legacy.cplusplus.com/reference/cstdlib/qsort/?kwqsort 完~
未经作者同意禁止转载