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中第三个参数指定的类型变量;

C语言函数qsort的使用方法的更多相关文章

  1. C语言函数实现的另类方法

    在前面看过那个BT的Javascript程序后,我们来看一个C语言的,相信大家还记得输出从1到1000的数最后的那个示例,本站还有很多这样的示例,如:变态的hello word,如何教新手编程,还有恐 ...

  2. 从linux0.11中起动部分代码看汇编调用c语言函数

    上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一 ...

  3. C语言函数指针实验

    上次看Atmel的示例工程,发现人家使用了函数指针的结构体(函数指针结构体).感叹人家的C语言功夫审核,自己费劲还是只能读懂的份.不过,函数指针确实好用.今天就试试这个超牛的东西.Now let's ...

  4. C语言(函数)学习之strstr strcasestr

    C语言(函数)学习之[strstr]&[strcasestr]一.strstr函数使用[1]函数原型char*strstr(constchar*haystack,constchar*needl ...

  5. C语言函数指针基础

    本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...

  6. 动态修改 C 语言函数的实现

    Objective-C 作为基于 Runtime 的语言,它有非常强大的动态特性,可以在运行期间自省.进行方法调剂.为类增加属性.修改消息转发链路,在代码运行期间通过 Runtime 几乎可以修改 O ...

  7. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

  8. Go 语言函数

    函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回类型,和参数. ...

  9. Go语言函数

    目录 函数定义 函数返回多个值 函数参数 Go 语言函数值传递 Go语言函数引用传递 函数用法 函数作为值 匿名函数 闭包 方法 不定参数的函数 init函数 内建函数 函数调用机制 总结 函数定义 ...

随机推荐

  1. 记微信开发(自定义回复&关注回复)

    记微信开发(自定义回复&关注回复) 记微信开发(自定义回复&关注回复) code: <?php/** * wechat php test *///define your toke ...

  2. ButterKnife你需要知道的点

    ButterKnife,这个方便findViewById而使用的库,无数的应用在使用它,以注解来实现的他,对应用的性能影响几乎可以忽略,可以放心使用. 使用: compile 'com.jakewha ...

  3. A + B Problem II---hdu1002

    A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. MEMS市场介绍

    惠普第一.德州仪器第二 市场观察发展报告说,MEMS市场在2007年增长百分之九,达到70亿美元,其中前30名制造商的收入总和有56亿美元,平均增长7个百分点. 惠普(HP)打印机使用MEMS喷墨头, ...

  5. Repeated meta-data items

    B.2 Generating your own meta-data using the annotation processor You can easily generate your own co ...

  6. PHP出现Notice: unserialize() [function.unserialize]: Error at offset问题的解决方案

    有两个原因(据我所知)会导致这个问题: (1) 字符串本身的问题 (2)字符编码的问题. 你unserialize的字符串的编码和文件本身的编码不一致.将文件编码改成和字符串一样的编码.这种问题比较隐 ...

  7. eclipse搭建Log4J日志环境

    在hibernate使用的日志标准都为slf,slf可以看作为它的接口,因此需要找到它的实例,为我们做日志.我们选择使用log4j为实例. 1. 为防止冲突,先将slf4j-nop的jar包(它也是s ...

  8. 7-05. 魔法优惠券(25) (数学 ZJU_PAT)

    题目链接:http://www.patest.cn/contests/ds/7-05 在火星上有个魔法商店,提供魔法优惠券.每一个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵.能够 ...

  9. Swift流程控制之循环语句和判断语句详解

    Swift提供了所有c类语言的控制流结构.包括for和while循环来执行一个任务多次:if和switch语句来执行确定的条件下不同的分支的代码:break和continue关键字能将运行流程转到你代 ...

  10. 安装Linux系统到u盘

    第一步:首先插入u盘到电脑主机usb接口处(建议插入到主机箱后置的usb接口).然后打开UltraISO软件,再打开选择须要写入u盘的Ubuntu 10.04或者其它版本号的Linux系统的iso镜像 ...