————————C语言中快速排序方法——————————————
在对浮点型排序是一定要用三木运算符(三目运算符内容下去自己看),因为如果也是用整形那样的减法的时候如果是两个十分相近的数字 可能返回一个小数(自己一会去试试),冉冉他cmp返回值是int(试试别的)因此就会将这个小数返回为0,系统认为其相等,失去了本来存在的大小关系。所以为了安全起见对浮点型进行快速排序的时候还是用三目运算符。
————————————1———————————————
对int类型数组的排序
int a[100];//定义数组
int cmp (const void*a,const void *b)//对函数内容进行说明
{
return*(int*)a-*(int*)b;
}
qsort(a,100,sizeof(a[0]),cmp);
____________________2___________________________
对字符型数组进行排序(和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);
___________________________3________________
对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);
__________________________4____________________
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;
}
PS:
其中的qsort函数包含在<stdlib.h>的头文件里,strcmp包含在<string.h>的头文件里
转载于:https://www.cnblogs.com/A-FM/p/5009603.html
————————C语言中快速排序方法——————————————相关推荐
- Java快速入门学习笔记9 | Java语言中的方法
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
- python调用什么函数实现对文件内容的读取_如何使用python语言中的方法对文件进行读写操作...
在我们使用python语言中的文件时,可以使用open()方法打开文件,close()方法关闭文件,read()方法读取文件内容,write()方法写入内容到文件中.下面利用几个实例说明文件读写方法, ...
- 理解Go语言中的方法和接收者
0x01 前言 Go语言的语法实在有些不一样,与其他面向对象语言相比,Go的方法似乎有些晦涩. 0x02 方法的定义 在Go语言里,方法和函数只差了一个,那就是方法在func和标识符之间多了一个参数. ...
- c 语言中虚方法有什么作用是什么,虚函数的作用?
定义 定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数[1] 语法:virtual 函数返回类型 函数名(参数表) {函数体;} 用途:实现多态性,通过指向派生类的 ...
- C语言中快速排序法(从小到大)实现过程详细分析
快速排序法:实际上是对冒泡排序法的一种改进. 算法:是描述求解问题方法的操作步骤集合. 快速排序法这一算法的基本思想是:首先设定一个分界值(一般是数组中的起始元素值),通过该分界值将数组的元素值分成左 ...
- c语言实现快速排序对文件中字符,C语言中快速排序和插入排序优化的实现
快速排序快速排序思想 1962年,由C.A.R.Hoare创造出来.该算法核心思想就一句话:"排序数组时,将数组分成两个小部分,然后对它们递归排序".然而采取什么样的策略将数组分成 ...
- go语言中的方法method
package main;import "fmt"//重新定义一个类型 //为该INT类型扩展方法 type INT int;type A struct {name string; ...
- c语言排快速排序过程,C语言中快速排序法怎么排
快速排序法的排法:首先每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边:然后将大于等于基准点的数全部放到基准点的右边:最后在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之 ...
- 科学记数法在c语言中表示方法,c/c++开发分享在C语言中阅读科学记数法
我正在尝试读取具有以下内容的文件: 1.0000000e + 01 2.9265380e + 03 5.0821200e + 02 4.3231640e + 01 2.0000000e + 01 1. ...
最新文章
- 在Mac下安装JMeter
- android api接口封装,生成App接口
- Linux下制作和使用静态库和动态库
- Java入门算法(贪心篇)丨蓄力计划
- Hadoop组件启停命令和服务链接汇总
- oracle聚合函数rank()的用法和一些体会
- 08. 切勿创建包含auto_ptr的容器
- Introducing to Spring Framework
- Matlab函数——wgn
- 汽车企业售后业务数字化转型,究竟有多卷
- centos7 安装sogou输入法
- 小程序组件传值方法调用
- PC端打开微信公众号文章 图片加载慢的解决方法
- HBuilderX安装教程
- C++中mian中的参数
- openCV实践项目:银行卡卡号识别
- ECSHOP漏洞集:http://sebug.net/appdir/ECSHOP
- python列表转集合_Pandas把dataframe或series转换成list的方法
- 笔记本 原因代码: 0x500ff 关机类型: 关闭电源_图吧垃圾佬关于笔记本电池更换的几项建议...
- Vue响应式原理(defineProperty)