qsort函数简介

  排序方法有很多种:选择排序,冒泡排序,归并排序,快速排序等。 看名字都知道快速排序是目前公认的一种比较好的排序算法。因为他速度很快,所以系统也在库里实现这个算法,便于我们的使用。 这就是qsort函数(全称quicksort)。它是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n)

  功能: 使用快速排序例程进行排序
  头文件:stdlib.h
  用法:  void qsort(void* base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*)); 
  参数: 1 待排序数组,排序之后的结果仍放在这个数组中
      2 数组中待排序元素数量
        3 各元素的占用空间大小(单位为字节)
             4 指向函数的指针,用于确定排序的顺序(需要用户自定义一个比较函数)

  qsort要求提供一个自己定义的比较函数。比较函数使得qsort通用性更好,有了比较函数qsort可以实现对数组、字符串、结构体等结构进行升序或降序排序。

  如比较函数 int cmp(const void *a, const void *b) 中有两个元素作为参数(参数的格式不能变),返回一个int值,比较函数cmp的作用就是给qsort指明元素的大小是怎么比较的。

qsort中几种常见的比较函数cmp

一、对int型数组排序

int num[];
int cmp_int(const void* _a , const void* _b)  //参数格式固定
{
int* a = (int*)_a; //强制类型转换
int* b = (int*)_b;
return *a - *b;  
} qsort(num,,sizeof(num[]),cmp_int);

  可见,参数列表是两个空指针,现在他要去指向你的数组元素。所以转换为你当前的类型,然后取值。默认升序排列(从小到大),如果想降序排列返回*b-*a即可。

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

char word[];
int cmp_char(const void* _a , const void* _b)  //参数格式固定
{
char* a = (char*)_a; //强制类型转换
char* b = (char*)_b;
return *a - *b;  
} qsort(word,,sizeof(word[]),cmp_char);

三、对double型数组排序

double in[];
int cmp_double(const void* _a , const void* _b)  //参数格式固定
{
double* a = (double*)_a; //强制类型转换
double* b = (double*)_b;
return *a > *b ? : -;  //特别注意
} qsort(in,,sizeof(in[]),cmp_double);

  在对浮点或者double型的一定要用三目运算符,因为要是使用像整型那样相减的话,如果是两个很接近的数则可能返回一个很小的小数(大于-1,小于1),而cmp的返回值是int型,因此会将这个小数返回0,系统认为是相等,失去了本来存在的大小关系

四、对字符串进行排序

char word[][];
int cmp_string(const void* _a , const void* _b)  //参数格式固定
{
char* a = (char*)_a;  //强制类型转换
char* b = (char*)_b;
return strcmp(a,b);
} qsort(word,,sizeof(word[]),cmp_string);

参考资料:http://wenku.baidu.com/link?url=9dEkcBiIyzIhRtpzqLd0W_sq-oQA6jiJRSlsWH7P8WmAsvsZdw3rPFAxoOOaR_qihT6ozJ9FDL0gUnUyzW2wFD-eAjvcCBp7vMH37hT8OHK

     http://www.cnblogs.com/syxchina/archive/2010/07/29/2197382.html

     http://www.cnblogs.com/BeyondAnyTime/archive/2012/05/22/2513776.html

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

  1. C语言中qsort函数用法

    C语言中qsort函数用法-示例分析    本文实例汇总介绍了C语言中qsort函数用法,包括针对各种数据类型参数的排序,非常具有实用价值非常具有实用价值. 分享给大家供大家参考.C语言中的qsort ...

  2. qsort函数用法【转】

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

  3. qsort函数用法

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

  4. qsort函数用法(转)

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

  5. linux c语言 select函数用法

    linux c语言 select函数用法 表头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<unis ...

  6. C语言qsort()函数的使用

    C语言qsort()函数的使用 qsort()函数是 C 库中实现的快速排序算法,包含在 stdlib.h 头文件中,其时间复杂度为 O(nlogn).函数原型如下: void qsort(void ...

  7. CGO封装C语言qsort函数

    封装qsort函数 package qsort /* #include <stdlib.h> typedef int (*qsort_cmp_func_t) (const void* a, ...

  8. qsort 函数用法

    用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *)); 各参数: 1 待排 ...

  9. 工作总结:qsort函数用法

    qsort(&g_AMTBuf[g_dwAMTLenth], m_nCount, sizeof(12), Compare); 参数说明: 1.待排序数组首地址: 2.数组中待排序元素数量: 3 ...

随机推荐

  1. Json对象与Json字符串互转

    1>jQuery插件支持的转换方式: 复制代码 代码如下: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成js ...

  2. Hex Editor实现Notepad++16进制编辑功能

    把HexEditor.dll文件复制到安装目录(如C:\Program Files\Notepad++\plugins),退出NotePad++重新打开即可!需要以十六进制显示时,点击菜单的:[插件] ...

  3. 设置viewport进行缩放

    <meta name="viewport" content="width=320,maximum-scale=1.3,user-scalable=no"& ...

  4. VS2010 安装使用STLPort

    VS2010 安装使用STLport 1.本机环境 win7 64位 visual studio 2010 中文旗舰版 STLport-5.2.1.tar.bz2 2.下载STLport http:/ ...

  5. python内存管理机制

    主要分为三部分: (1)内存池机制(2)引用计数(3)垃圾回收 (1)内存池机制对于python来说,对象的类型和内存都是在运行时确定的,所以python对象都是动态类型简单来说,python内存分为 ...

  6. 382. Linked List Random Node

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  7. C++ Primer:第八章:IO库(续)

    二:文件输入输出. (1) 使用文件流对象: 头文件fstream定义了三个类型来支持文件IO:ifstream从一个给定的文件中读取数据,ofstream向一个给定的文件中写入数据,以及fstrea ...

  8. 让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求(转载)

    转自:http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html 今天下午17点左右,博客园博客站点出现这样的错误信息: Error Sum ...

  9. magic矩阵 分类: 数学 2015-07-31 22:56 2人阅读 评论(0) 收藏

    魔方矩阵 魔方矩阵是有相同的行数和列数,并在每行每列.对角线上的和都相等.你能构造任何大小(除了2x2)的魔方矩阵. 1.历史       魔方又称幻方.纵横图.九宫图,最早记录于我国古代的洛书.据说 ...

  10. centos rm 回收站

    桌面版本的linux就默认有,非桌面版本貌似没(反正我没找到) linux rm删除文件之后,恢复就比较麻烦了,即使恢复了,文件名格式都变成一串数字了. 修改root用户的环境变量 vi ~/.bas ...