文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。

qsort包含在<stdlib.h>头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序。排序之后的结果仍然放在原数组中。使用qsort函数必须自己写一个比较函数。

函数原型:

void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );

用法以及参数说明:

Sorts the num elements of the array pointed by base, each element size bytes long, using the comparator function to determine the order.

The sorting algorithm used by this function compares pairs of values by calling the specified comparator function with two pointers to elements of the array.

The function does not return any value, but modifies the content of the array pointed by base reordering its elements to the newly sorted order.

base Pointer to the first element of the array to be sorted.(数组起始地址)
num Number of elements in the array pointed by base.(数组元素个数)
size Size in bytes of each element in the array.(每一个元素的大小)
comparator Function that compares two elements.(函数指针,指向比较函数)
1、The function must accept two parameters that are pointers to elements, type-casted as void*. These parameters should be cast back to some data type and be compared.
2、The return value of this function should represent whether elem1 is considered less than, equal to, or greater than elem2 by returning, respectively, a negative value, zero or a positive value.
Return Value none (无返回值)

一、对int类型数组排序

int num[100];

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

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

二、对char类型数组排序(同int类型)

char word[100];

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

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

三、对double类型数组排序

double in[100];

int cmp( const void *a , const void *b )
{
return *(double *)a > *(double *)b ? 1 : -1;
}

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

四、对结构体一级排序

struct Sample
{
double data;
int other;
}s[100]

//按照data的值从小到大将结构体排序

int cmp( const void *a ,const void *b)
{
return (*(Sample *)a).data > (*(Sample *)b).data ? 1 : -1;
}

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

五、对结构体二级排序

struct Sample
{
int x;
int y;
}s[100];

//按照x从小到大排序,当x相等时按照y从大到小排序

int cmp( const void *a , const void *b )
{
struct Sample *c = (Sample *)a;
struct Sample *d = (Sample *)b;
if(c->x != d->x) return c->x - d->x;
else return d->y - c->y;
}

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

六、对字符串进行排序

struct Sample
{
int data;
char str[100];
}s[100];

//按照结构体中字符串str的字典顺序排序

int cmp ( const void *a , const void *b )
{
return strcmp( (*(Sample *)a).str , (*(Sample *)b).str );
}

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

附加一个完整点的代码,对字符串二维数组排序:

#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;
}

C语言标准库函数 qsort 详解相关推荐

  1. c语言库里的排序函数,C语言标准库函数qsort详解

    1 函数简介 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(con ...

  2. C语言库函数— qsort () 详解

    目录 1. qsort()函数简介 1.1 函数原型 1.2 函数参数 2. 比较函数简介 2. 1 比较函数参数 2.2 比较函数使用 3. qsort()函数使用 3.1 整形数组排序 3.2 字 ...

  3. C语言标准库函数qsort( )——数据排序

    大家好!我是保护小周ღ,本期为大家带来的是深度解剖C语言标准库函数 qsort(),qsort()函数他可以对任意类型的数据排序,博主会详细解释函数使用方法,以及使用快速排序的左右指针法模拟实现函数功 ...

  4. linux动态库注册函数,Linux动态库函数的详解

    linux动态库函数的详解 加载动态库 void *dlopen(const char *filename, int flag); flag的可能值: rtld_lazy rtld_now rtld_ ...

  5. linux 动态库构造函数,Linux动态库函数的详解

    Linux动态库函数的详解 加载动态库 void *dlopen(const char *filename, int flag); flag的可能值: RTLD_LAZY RTLD_NOW RTLD_ ...

  6. C语言标准库函数qsort(快速排序函数)

    文章目录 一.函数原型 二.函数解析 比较函数 三.手写快排 四.使用qsort 1.对int数组排序 2.对double数组排序 3.对char数组排序 4.对字符串排序 (1)char s[][] ...

  7. C语言标准库函数qsort排序的介绍与使用

    qsort函数包含在<stdlib.h>的头文件里. qsort函数声明如下: void qsort(void *base, size_t nmemb, size_t size, int( ...

  8. C语言标准库函数qsort具体解释

    1 函数简单介绍 功 能: 使用高速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(c ...

  9. C51 基本函数、中断函数和库函数的详解

    函数的定义和调用 此外,C51编译器本身还提供了丰富的库函数,用户可以根据需要随时调用,从而大大提高编程效率. 1. 函数的定义 函数定义的一般形式为: 函数类型 函数名(形参列表) { 局部变量定义 ...

最新文章

  1. boundingRectWithSize 的使用
  2. python数据处理实例-Python数据分析实例操作
  3. linux 修改超级权限密码,linux 修改用户密码
  4. 计算机原理期中考试答案,微机原理与接口技术期中考试题(带答案)
  5. 批量下载,多文件压缩打包zip下载
  6. 到 Google 面试去!开发者必读的避坑指南
  7. Codeforces Round #493 (Div. 2):C. Convert to Ones
  8. 在CentOS上,Servlet出现java.lang.NoClassDefFoundError
  9. node.js 创建服务器_Node.js HTTP软件包–创建HTTP服务器
  10. Sqlmap安装教程
  11. Linux内核移植入门
  12. 安卓开源项目周报0301
  13. Excel实现行列转换的三种方式
  14. 网站出现502 BAD GATEWAY的解决办法
  15. c++ 运算符重载(简单易懂)
  16. 这3种管理者是“企业毒瘤”,须根除
  17. 模拟信号拉线位移编码器是如何来校准的?
  18. Python 书籍 搜索
  19. 2020/01/03 基于sharedLibrary进行CICD流程的优化(一)
  20. 谷歌浏览器java不能启动_selenium+java谷歌浏览器 网站打开不正常

热门文章

  1. 使用argparse解析命令行参数
  2. 帝国理工:如何用 AI 解决 80% 专科医生担忧的心律装置移植手术难题
  3. Uniform Distribution均匀分布
  4. C++ 'dynamic_cast' and Java 'instanceof' 使用对比
  5. NiFi-面向流程的大数据处理框架
  6. linux下配置SVN搭建 centos svn安装配置
  7. 几个交换问题的咨询?
  8. ssh服务及安全配置
  9. priority_quenue
  10. 创建完maven工程之后,提示[FATAL_ERROR] Cannot start Maven: Project JDK is not specified. a href=''Configure...