• sqort函数运用


    c++函数库中提供了快速排序函数qsort,它是一种高效的排序算法。
    
    
    qsort函数的形式为:
    void qsort(void *array,int nelem,int width,int(*fcmp)(const void *,const void *));
    第一个参数是参与排序的数组的首地址
    第二个参数是参与排序数组的元素个数
    第三个参数是单个元素所属数据类型的长度(字节数)
    第四个参数是指向函数的指针,用于指向用户设计的比较函数
    举例:
    一:整型数组的排序
    比较函数:
    int comp(const void *a,const void *b){
    return *(int *)a-*(int *)b;
    }
    调用形式:
    qsort(a,100,sizeof(int),comp);
    二:对double性数据排序
    View Code
    #include<iostream>
    using namespace std;
    int cmp( const void *a , const void *b ) 
    { 
        return *(double *)a > *(double *)b ? 1 : -1; 
    }
    
    int main(){
         double in[4]={39.9,43.6,5,65.0};
         qsort(in,4,sizeof(double),cmp);
         for(int i=0;i<4;i++)
           cout<<in[i]<<" ";
         return 0;
    }
    三:字符串排序
    
    
    
    比较函数:
    int comp(const void *a,const void *b){
    return strcmp((char *)a,(char *)b);
    } 调用形式:
    char [100][15]; .....
    qsort(a,1000,sizeof(char)*15,comp);
    View Code
    #include<cstdlib>
    using namespace std;
    typedef char Element_type;
    
    Element_type list[]="sdfajlkjdsaffsd";
    int comp(const void *p1,const void *p2){
        //降序排序
        //return strcmp((char *)p2,(char *)p1);
        //升序排序
        return strcmp((char *)p1,(char *)p2); 
    }
    int main(){
        cout<<"排序前:";
        cout<<list<<endl;
        //考虑到字符串结束符,所以元素个数减一 
        qsort(list,sizeof(list)/sizeof(Element_type)-1,sizeof(Element_type),comp);
        cout<<"排序后:"<<list<<endl;
        system("pause");
        return 0; 
    }
    四:结构体排序
    View Code
    //此题是按ID对结构体排序 
    
    #include<iostream>
    #define LT 100 //书名长度 
    #define LA 40 //作者名字长度
    using namespace std;
    typedef struct b{
        int ID;
        char title[LT];//书名 
        char author[LA];//作者名 
    }Book;
    Book *readbook(int *nb){
        int k;
        Book *B;
        cin>>*nb;
        B=new Book[*nb*sizeof(Book)];
        for(k=0;k<*nb;k++){
            cin>>B[k].ID;
            cin.get();
            cin.getline(B[k].title,LT);//省略最后一个参数,系统默认结束符为'\0' 
            cin.getline(B[k].author,LA);
        }
        return B;
    }
    void writebook(Book B[],int nb){
        int k;
        cout<<nb<<endl;
        for(k=0;k<nb;k++){
            cout<<B[k].ID<<endl;
            cout<<B[k].title<<endl;
            cout<<B[k].author<<endl;
        }
    }
    int compare(const void *b1,const void *b2){
        Book *aa=(Book *)b1;
        Book *bb=(Book *)b2;
        return ((aa->ID)-(bb->ID));
    }
    int main(){
        Book *B;
        int nb;
        B=readbook(&nb);
        qsort(B,nb,sizeof(Book),compare);
        writebook(B,nb);
        return 0;
    }
     
    
    
  • 相关阅读:
    在 MAC 下配置 Nginx
    Color Schema 配色随笔
    .Net与 WebAssembly 随笔
    关于Xamarin、Qml、数据绑定、MVC、MVVM 相关的散讲
    用Nuget部署程序包
    Qt3D
    Qt3D Shader
    Qt QML 2D shader
    LearnOpenGL
    Qt3D 5.9 and future
  • 原文地址:https://www.cnblogs.com/aijianiula/p/2460115.html
Copyright © 2020-2023  润新知