qsort函数排序实例详解

作者: SuperDing | 来源:发表于2017-02-14 10:22 被阅读0次

    排序qsort 使结构体中按照某数据进行排序函数
    头文件:stdlib.h
    qsort 的函数原型是
    void qsort(voidbase,size_t num,size_t width,int(__cdeclcompare)(const void,const void));
    各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序

    //第四个参数:
    int comp(const void*a,const void*b)
    {
    return *(int*)a-*(int*)b;
    }
    上面是由小到大排序,return *(int *)b - *(int *)a; 为由大到小排序。
    
    对一维数组的排序实例(从小到大排序):
       #include<stdio.h>
       #include<stdlib.h>
    
        int comp(const void*a,const void*b)
        {
          return *(int*)a-*(int*)b;
         }
    
         int main()
        {
            int arr[10]={12,23,3,4,25,765,87,543,32,78};
            qsort(arr,10,sizeof(int),comp);
    
            int i=0;
            for(;i<10;i++)
            {
                 printf("%d\t",arr[i]);
             }
             printf("\n");
             return 0;
         }
    对一个二维数组进行排序:
        例如:int a[1000][2] :qsort(a,1000,sizeof(int)*2,comp);
    
        int comp(const void*a,const void*b)
       {
            return((int*)a)[0]-((int*)b)[0];
       }
    对字符串进行排序
        int Comp(const void*p1,const void*p2)
        {
             return strcmp((char*)p2,(char*)p1);
        }
    
         int main()
        {
           char a[MAX1][MAX2];
           qsort(a,lenth,sizeof(a[0]),Comp);
         }//lenth为数组a的长度
    
    按结构体中某个关键字排序(对结构体一级排序):
        struct Node
        {
            double data;
            int other;
         }s[100];
    
        int Comp(constvoid*p1,constvoid*p2)
       {
           return(*(Node*)p2).data>(*(Node*)p1).data?1:-1;
        }
        qsort(s,100,sizeof(s[0]),Comp);
    按结构体中多个关键字排序(对结构体多级排序)[以二级为例]:
        struct Node
           {
               int x;
               int y;
            }s[100];
           //按照x从小到大排序,当x相等时按y从大到小排序
           int Comp(const void*p1,const void*p2)
          {
               struct Node*c=(Node*)p1;
               struct Node*d=(Node*)p2;
               if(c->x!=d->x)
                     return  c->x-d->x;
               else
                     return  d->y-c->y;
          }
    对结构体中字符串进行排序:
          struct Node
          {
               int data;
               char str[100];
          }s[100];
    //按照结构体中字符串str的字典序排序
         int Comp(const void*p1,const void*p2)
         {
               return strcmp((*(Node*)p1).str,(*(Node*)p2).str);
          }
          qsort(s,100,sizeof(s[0]),Comp);

    相关文章

      网友评论

        本文标题:qsort函数排序实例详解

        本文链接:https://www.haomeiwen.com/subject/welxwttx.html