欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

qsort函数排序实例详解

程序员文章站 2023-12-26 15:27:51
...

排序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);

转载于:https://www.jianshu.com/p/006d6d2cbb48

上一篇:

下一篇: