蛇皮 @ 2020-01-18 18:52:38
有大佬能教一下c语言中qsort函数的用法以及如何用qsort快排结构体吗
by forlight @ 2020-01-18 18:57:25
四个参数:
1.数组开头的指针
2.数组元素数目
3.每个元素的大小(用sizeof)
4.比较函数的指针(sort里面比较结构体要用到,就是俗说的cmp)
by NujObIuc @ 2020-01-18 18:57:49
@蛇皮 就是从数组第一个开始,算出它是这个数列中第几大的,然后把它小的放在左端,把它大的放在右端然后依次将左端和右端进行递归,重复操作。
by Wenoide @ 2020-01-28 09:52:50
namespace Sort{
template<typename T>inline bool f(T x,T y){
return x<y;
}
template<typename T>void Qsort(T *p,int l,int r,bool (*cmp)(T x,T y)=f){
if(l>=r){
return;
}
int i=l,j=r;
T m=p[(l+r)>>1];
while(i<=j){
while(cmp(p[i],m)){
++i;
}
while(cmp(m,p[j])){
--j;
}
if(i<=j){
T t=p[i];
p[i]=p[j];
p[j]=t;
++i;
--j;
}
}
Qsort(p,l,j,cmp);
Qsort(p,i,r,cmp);
return;
}
}
using namespace Sort;
乱打的……参考一下
结构体可以自定义 cmp
函数
使用时 Qsort(数组名,左端点(包含),右端点(包含),比较函数(可不填))