有大佬能教一下c语言中qsort函数的用法以及如何用qsort快排结构体吗

P1478 陶陶摘苹果(升级版)

蛇皮 @ 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(数组名,左端点(包含),右端点(包含),比较函数(可不填))


|