C语言函数qsort的使用方法

qsort函数stdlib.h文件中,函数原型为

void qsort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,const void *));

*base 为要排序的数组

nelem 为要排序的数组的长度

width 为数组元素的大小(一字节为单位)

默认是从小到大排序的!

(* Comp)(const void *p1,const void *p2) 为判断大小函数的指针,这个函数需要自己定义,如果p1>p2,函数返回-1;a<b,函数返回1;a==b函数返回0

 

对int类型数组排序
int num[100];

int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}

qsort(num,100,sizeof(num[0]),cmp);

 

对double类型数组排序

int Mycmp(const void *a ,const void * b)

{

 return (*(double *)a>*(double * )b?1:-1);

}

 

struct ln{
double data;
int x;
int y;
};

int Mycmp2(const void *a ,const void * b)
{
return (((ln *)a)->data>((ln *)b)->data?1:-1);
}

 

  1. 对结构体二级排序

    struct ln{
    int x;
    int y;
    };

    对x按升序排列,如果x相同,则y按降序排列

    int Mycmp1(const void *a ,const void * b)
    {
    return (((ln *)a)->data>((ln *)b)->data?1:-1);
    } //升序

    int Mycmp2(const void *a ,const void * b)
    {
    if(((ln *)a)->data==((ln *)b)->data) 
     return (((ln *)a)->x>((ln *)b)->x?-1:1);
    }//降序

    int Mycmp2(const void *a ,const void * b)                                   //这个函数和上面两个函数之和的功能相同
    {
    if(((ln *)a)->data==((ln *)b)->data) 
     return (((ln *)a)->x>((ln *)b)->x?-1:1);
    else
     return (((ln *)a)->data>((ln *)b)->data?1:-1);

    }

     

  2.  

    对字符串进行排序

    int Mycmp3(const void *a ,const void * b)
    {
    return strcmp(((ln *)a)->str,((ln *)b)->str);
    }

     

  3.  

    对字符串二维数组排序完整代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    char s[2001][1001];

    int cmp(const void *a, const void *b){
    return strcmp((char *)a,(char *)b);
    }

    int main(){
    int i,n;
    scanf("%d",&n);
    getchar();
    for(i=0;i<n;i++) gets(s[i]);
    qsort(s,n,1001*sizeof(char),cmp);
    for(i=0;i<n;i++) puts(s[i]);
    return 0;
    }


     

    END

注意事项

  • qsort函数中的第四个参数为函数指针,函数名称即是函数指针,int  (* cmp)(const void * a,const void * b),其中指针a,b指向的是qsort中第三个参数指定的类型变量;

posted @ 2016-03-07 10:05  指间ゝ繁华初逝的格调  阅读(286)  评论(0编辑  收藏  举报