七种qsort排序方法

<本文中排序都是采用的从小到大排序>

一、对int类型数组排序

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类型)

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类型数组排序(特别要注意)

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 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);

五、对结构体二级排序

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);

六、对字符串进行排序

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

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

转载于:https://www.cnblogs.com/AlwinXu/archive/2009/03/23/1419871.html

qsort的7种用法(转)相关推荐

  1. Android Intent的几种用法全面总结

    Android Intent的几种用法全面总结 Intent, 用法 Intent应该算是Android中特有的东西.你可以在Intent中指定程序要执行的动作(比如:view,edit,dial), ...

  2. mysql中模糊查询的四种用法介绍

    下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示.  比如 SELECT * FROM [user ...

  3. javamap的用法_Java Map常用的几种用法。

    Java Map常用的几种用法. 通常,Map是由一组键值对组成的数据结构,每个键只能在映射中出现一次.这篇文章总结了有关如何使用Java Map及其实现的类的前9个常见问题解答.为了简单起见,我将在 ...

  4. using 的三种用法

    using 有哪三种用法? 1)引入命名空间. 2)给命名空间或者类型起别名. 3)划定作用域.自动释放资源,使用该方法的类型必须实现了 System.IDisposable接口,当对象脱离作用域之后 ...

  5. C++ operator两种用法【转】

    C++中的operator,有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换).下面分别进行介绍: 1.operator ...

  6. java和python可以在一个项目中同时使用么-java调用python的几种用法(看这篇就够了)...

    java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...

  7. static的三种用法,定义静态变量,静态函数,静态代码块!

    static的三种用法,定义静态变量,静态函数,静态代码块! 1.定义静态变量 class PersonStatic { //静态变量的特点 //1.静态变量无需生成对象就可被调用,可以使用类名和对象 ...

  8. Vue——基本的代码结构和插值表达式、v-cloak||Vue指令之v-text和v-html||v-bind的三种用法||Vue指令之v-on

    Vue的基本代码 <!DOCTYPE html> <html lang="en"><head><meta charset="UT ...

  9. js中继承的几种用法总结(apply,call,prototype)

    本篇文章主要介绍了js中继承的几种用法总结(apply,call,prototype) 需要的朋友可以过来参考下,希望对大家有所帮助 一,js中对象继承 js中有三种继承方式 1.js原型(proto ...

最新文章

  1. SpringMVC @RequestBody 接收Json数组对象
  2. 用Flutter改造ZS项目小记一:界面显示一张图片
  3. 成功要养成的习惯和改掉的习惯
  4. 洛谷 P1070 道路游戏(noip 2009 普及组 第四题)
  5. linux驱动中printk的使用注意事项
  6. Android开发中遇到的问题(二)——新建android工程的时候eclipse没有生成MainActivity和layout布局...
  7. C语言实现红黑树(附完整源码)
  8. 致技术创业的朋友:其实销售很简单(Z)
  9. 网络基础知识(面试基础)
  10. 安装Oracle 11g 出现交换空间不够
  11. D-News|扎克伯格下月发布人工智能管家,美放宽无人机商用飞行标准
  12. 重磅!阿里发布全新操作系统,成功顶住多年双 11,这次要干翻 CentOS 了!
  13. 取消2008关机对话框
  14. php工作在fastcgi模式下怎样配置xcache,FastCGI模式编译安装LAMP+XCache
  15. 字节码指令之算术指令
  16. php怎么设置div圆角,不用图片的DIV圆角(兼容各浏览器)
  17. 解决html页面运行时出现乱码问题
  18. tabbar角标 小程序_小程序tabbar实现底部tab导航栏
  19. 微信公众号调取相册和摄像头功能,实现图片上传
  20. 关于Android应用开发的一些安全注意事项

热门文章

  1. (kruskal)还是畅通工程
  2. haddler处理队列 netty_Netty堆外内存泄漏排查,这一篇全讲清楚了
  3. sigkill mysql_Ubuntu不能停止mysqld
  4. 用计算机探索规律反思,用计算器探索规律教学反思
  5. java两种异常_JAVA两种异常的区别 (转)
  6. cmd255command.executereader()打印连接错误_打印经常遇到的几个问题,轻松解决
  7. Spring自动装配Bean
  8. MySql数据库驱动类
  9. mysqlfront连接MySQL错误_使用MySql-Front远程连接MySQL失败的解决办法
  10. vue可以直接进行运算么_Vue实现计算器功能