首页投稿(暂停使用,暂停投稿)

qsort函数排序实例详解

2017-02-14  本文已影响0人  SuperDing

排序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);
上一篇下一篇

猜你喜欢

热点阅读