一、简介
 
原 型: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));
功 能: 使用快速排序例程进行排序
 
参 数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序
说 明:qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n)。
     qsort要求提供的函数是需要自己定义的一个比较函数,比较函数使得qsort通用性更好。有了比较函数qsort可以实现对数组、字符串、结构体等结构进行升序或降序排序。
     如int cmp(const void *a, const void *b)中有两个元素作为参数,返回一个int值,如果比较函数返回大于0,qsort就认为a > b,返回小于0qsort就认为a < b。qsort知道元素的大小了,就可以把大的放前面去。如果你的比较函数返回本来应该是1的(即a > b),而却返回-1(小于0的数),那么qsort认为a < b,就把b放在前面去,但实际上是a > b的,所以就造成了降序排序的差别了。
     简单来说,比较函数的作用就是给qsort指明元素的大小事怎么比较的。
 
二、使用举例(MinGW5测试通过)
 
1、对一维数组排序:
   
 
2、对字符串排序:
#include <stdio.h>
#include <stdlib.h>typedef char Element_type;Element_type list[] = "djfkwjefklwefagj"; int Comp(const void *p1,const void *p2)
{//降序排序return strcmp((char *)p2,(char *)p1);//升序排序//return strcmp((char *)p1,(char *)p2);
}int main(void)
{puts("排序前:");puts(list);printf("\n");//考虑还有字符串结束符,这里元素个数别忘减1qsort(list, sizeof(list) / sizeof(Element_type) - 1, sizeof(Element_type), Comp);system("pause");puts("排序后:");puts(list);printf("\n");return 0;
}


3、按结构体中某个关键字排序(对结构体一级排序):
#include <stdio.h>
#include <stdlib.h>struct Node
{double data;int other;
}s[100];int Comp(const void *p1,const void *p2)
{return (*(Node *)p2)->data - (*(Node *)p1)->data;
}int main(void)
{puts("排序前:");//codeprintf("\n");qsort(s, 100, sizeof(s[0]), Comp);system("pause");puts("排序后:");//codeprintf("\n");return 0;
}

4、按结构体中多个关键字排序(对结构体多级排序)[以二级为例]:
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;
}

5、对结构体中字符串进行排序:
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);
}

转载于:https://www.cnblogs.com/pang123hui/archive/2011/01/28/1947003.html

总结一下qsort()函数的使用与注意相关推荐

  1. c语言标准库低通的qsort函数不适宜所有排序任务的原因

    c语言标准库低通的qsort函数不适宜所有排序任务的原因: 第一:它只能用于内存中的数组排序,不能对链表中的数据排序: 第二:因为它是参数化的函数,所以能对各种数据进行操作,也造成它的运行速度比针对单 ...

  2. C中的qsort函数和C++中的sort函数的理解与使用

    一.qsort()函数 原型:_CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*)); ...

  3. 【编码】对qsort函数的稳定排序优化-京东实习笔试编程题(一)-2016.04.08

    今晚在做京东的笔试题时,使用了qsort函数,由于排序结果不稳定,导致一直无法ac.后来在待排序的结构体中多加入一个关键字段,较简单的解决了问题. 题目: 生日礼物 Time Limit: 2000/ ...

  4. C语言程序设计之标准库快速排序qsort函数用法示例

    C语言程序设计之标准库快速排序qsort函数,排序效率高,使用方便,太棒了. qsort函数定义如下: #include <stdlib.h>void qsort(void *base, ...

  5. qsort函数应用大全

    七种qsort排序方法 <本文中排序都是采用的从小到大排序> 一.对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , co ...

  6. qsort()函数详解

    一.写在开头 1.1 本节内容 学习C语言中的qsort()函数. 二.qsort() 2.1 函数原型 void qsort(void *base,size_t nmemb,size_t size, ...

  7. 在c++中qsort()排序函数的使用qsort函数应用大全

    七种qsort排序方法 <本文中排序都是采用的从小到大排序> 一.对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , co ...

  8. qsort函数使用手册

    原网址:http://www.maycode.com/index.php/linux/54-linuxdevelop/1386-cpp.html qsort包含在<stdlib.h>头文件 ...

  9. 【C语言】qsort函数用法(转)

    qsort函数用法 qsort 功 能: 使用快速排序例程进行排序 用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(cons ...

最新文章

  1. IPV6的设置问题!
  2. 图像非极大值抑制 Sobel 边缘实现
  3. 爬虫之 xpath的节点关系
  4. C# 获取当前屏幕DPI
  5. Android 启动过程详解
  6. 红黄蓝收购新加坡某民营儿童教育集团,宣布更名为GEH Education...
  7. Centos的yum源更换为国内的阿里云源
  8. groovy lambda_Java Lambda流和Groovy Clouse的比较
  9. 前端学习(1924)vue之电商管理系统电商系统之权限的渲染方式
  10. 三月磨一剑---也来晒晒我们的开发产品 欢迎拍砖
  11. 对用户密码进行加盐处理
  12. 吉利汽车借助阿里云进行汽车行业新零售模式探索
  13. html用记事本打字显示问号,电脑记事本问号怎么办
  14. 从零开始的泡泡龙游戏
  15. 不同手指戴戒指时的清热解毒的清是什么意思?_百度知道
  16. AUTOCAD——打断命令、合并命令
  17. Connor学Android - JNI和NDK编程
  18. day1 计算机基础以及python基础
  19. cesium接入高德、osm、谷歌、arcgis、mapbox地图(cesium篇.3)
  20. 两张图搞定IJK源码

热门文章

  1. JZOJ 5286. 【NOIP2017提高A组模拟8.16】花花的森林
  2. MATLAB入门级知识
  3. 线段树的数组大小下限及证明
  4. java 数据库数据写接口_Java读取接口数据并保存到数据库
  5. python中os.path.join()的循环用法_Python中.join()和os.path.join()两个函数的用法详解
  6. 【模板】AC自动机(简单版)
  7. centos系统下安装python3以及pip3
  8. 【BZOJ1934】善意的投票(网络流)
  9. Xcode9学习笔记69 - 创建各种类型的文件(文本、数组、字典、图片)
  10. (二期)IOS调试技巧