c++中qsort函数简介

原创 2011年10月19日 21:00:35
  C语言中排序的算法有很多种,系统也提供了一个函数qsort()可以实现快速排序。原型如下:

  void qsort(void *base, size_t nmem, size_t size, int (*comp)(const void *, const void *));

  它根据comp所指向的函数所提供的顺序对base所指向的数组进行排序,nmem为参加排序的元素个数,size为每个元素所占的字节数。例如要对元素进行升序排列,则定义comp所指向的函数为:如果其第一个参数比第二个参数小,则返回一个小于0的值,反之则返回一个大于0的值,如果相等,则返回0。

 

  七种qsort排序方法
 
  <本文中排序都是采用的从小到大排序>
 
  一、对int类型数组排序
 

 

C/C++ code
int num[100];
Sample:
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}
qsort(num,100,sizeof(num[0]),cmp);

 


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

 

C/C++ code
char word[100];
Sample:
int cmp( const void *a , const void *b )
{
return *(char *)a - *(int *)b;
}
qsort(word,100,sizeof(word[0]),cmp);

 


  三、对double类型数组排序(特别要注意)
 

 

C/C++ code
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);

 

  四、对结构体一级排序
 

C/C++ code
struct In
{
double data;
int other;
}s[100]
//按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写
int cmp( const void *a ,const void *b)
{
return (*(In *)a)->data > (*(In *)b)->data ? 1 : -1;
}
qsort(s,100,sizeof(s[0]),cmp);

  五、对结构体二级排序
 
C/C++ code
struct In
{
int x;
int y;
}s[100];
//按照x从小到大排序,当x相等时按照y从大到小排序
int cmp( const void *a , const void *b )
{
struct In *c = (In *)a;
struct In *d = (In *)b;
if(c->x != d->x) return c->x - d->x;
else return d->y - c->y;
}
qsort(s,100,sizeof(s[0]),cmp);

  六、对字符串进行排序
 
C/C++ code
struct In
{
int data;
char str[100];
}s[100];
//按照结构体中字符串str的字典顺序排序
int cmp ( const void *a , const void *b )
{
return strcmp( (*(In *)a)->str , (*(In *)b)->str );
}
qsort(s,100,sizeof(s[0]),cmp);

  七、计算几何中求凸包的cmp
 
C/C++ code
int cmp(const void *a,const void *b) //重点cmp函数,把除了1点外的所有点,旋转角度排序
{
struct point *c=(point *)a;
struct point *d=(point *)b;
if( calc(*c,*d,p[1]) < 0) return 1;
else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y)) //如果在一条直线上,
则把远的放在前面
return 1;
else return -1;
}

细细品味ASP.NET (二)

细细品味ASP.NET (二)青苹果工作室(编译) 01-5-17 下午 01:33:55Web表单 ASP.NET Web Forms就是Web页面,同现在你用 ASP编写代码所做的工作是一样的。...
  • tchaikov
  • tchaikov
  • 2001-05-17 18:50:00
  • 982

C/C++中的qsort()函数及其cmp()

1.函数简介 功 能:  使用快速排序例程进行排序 头文件:stdlib.h 函数原型:void __cdecl qsort ( void *base, size_t...
  • superlc320
  • superlc320
  • 2014-01-21 22:06:52
  • 2016

浅谈C++中qsort与sort的使用方法与区别

这两天在刷leetcode时看到了一些关于排序的题目,其中遇到各种大神对sort与qsort的使用,个人在使用时对比发现了一些sort与qsort的区别,并对它们的使用方法进行了一些总结介绍。 在平...
  • lkn910907
  • lkn910907
  • 2015-03-05 17:01:34
  • 2545

[C/C++基础知识] 一篇就让你彻底搞懂qsort快速排序的文章

最近在做LeetCode的题目、面试和笔试后发现经常考察快速排序的知识。通过这篇文章介绍,能让你彻底的了解和学习快排,主要从一下三个部分进行介绍: 一.C语言实现qsort快速排序 ...
  • Eastmount
  • Eastmount
  • 2015-10-11 05:45:39
  • 5514

C++ STL sort和qsort函数

一、sort使用: 1、需要头文件:include 2、使用方法 用法(1):sort(begin,end);//默认是从小到大排序,begin表示要排序元素的首地址,end表示要排序元素的结束地址 ...
  • jiary5201314
  • jiary5201314
  • 2016-04-10 16:12:56
  • 3659

qsort源代码分析

qsort 的函数原型是void __cdecl qsort ( void *base, size_t num, size_t width, int (__cdecl *comp)(const voi...
  • Gen_Ye
  • Gen_Ye
  • 2016-10-21 10:19:34
  • 2436

C++ sort和qsort有关总结

【qsort】 原 型: void __fileDECL qsort ( void *base, size_t num, size_t width, int (__fi...
  • hellokandy
  • hellokandy
  • 2016-07-25 16:39:47
  • 552

C&C++中的qsort和sort库函数

今天在看高手的代码的时候才发现,C语言中有一个qsort的库函数(在头文件中),该函数可以对用户指定的数据(或者说内存区域)进行快速排序,为什么说是对内存区域排序呢?因为排序的过程中是对用户指定的内存...
  • lewsn2008
  • lewsn2008
  • 2013-03-01 14:22:15
  • 2018

字符串数组qsort排序

字符串数组qsort排序
  • happy_cheng
  • happy_cheng
  • 2015-03-04 23:46:27
  • 2837

qsort快排函数源代码

  • 2011年12月07日 17:36
  • 13KB
  • 下载
收藏助手
不良信息举报
您举报文章:c++中qsort函数简介
举报原因:
原因补充:

(最多只允许输入30个字)