qsort用法(qsort用法是什么)
本文目录
- qsort用法是什么
- 谁能全面讲解下qsort函数,参数,使用方法,具体作用等等
- 很奇怪 用qsort进行简单的排序,但是有些地方不懂 如下面的那样
- 关于c语言中qsort函数的用法
- C++中qsort怎么用
- c++中的标准库函数qsort怎么用有什么作用
qsort用法是什么
void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );这个是qsort的原型base是要被排序的数据的起始位置num是要被排序的元素的个数size是一个元素的大小,单位是字节comparator 是一个函数,原型是 int comparator ( const void * a, const void * b)这个函数取两个元素的地址a和b, 如果a指向的元素比b小, 函数返回负整数如果a比b大, 返回正整数如果a和b相等, 返回0
谁能全面讲解下qsort函数,参数,使用方法,具体作用等等
六类qsort排序方法 前一段时间做题觉得qsort函数很好用, 但有时不太会用比如按结构体一级排序、二级排序、字符串排序等, 故通过查资料将其整理一番。 以下是其具体分类及用法(若无具体说明是以降序排列): 1、对一维数组排序: (Element_type是一位数组中存放的数据类型, 可以是char, int, float, double, etc ) 使用qsort之前,必须自己定义一个比较函数。 这个比较函数用于比较两个元素的大小。 由于qsort可以排序任意数据类型,包括自定义的结构类型, 因此,做一个自定义的比较函数是必要的。 int Comp(const void *p1,const void *p2 ) { return *((Element_type *)p2) 》 *((Element_type *)p1) ? 1 : -1; } int main() { Element_type list: struct Node { int x; int y; }s; //按照x从小到大排序,当x相等时按y从大到小排序 int Comp(const void *p1,const void *p2) { struct Node *c = (Node *)p1; struct Node *d = (Node *)p2; if(c-》x != d-》x) return c-》x-d-》x; else return d-》y - c-》y; } 5、对结构体中字符串进行排序: struct Node { int data; char str; }s; //按照结构体中字符串 str 的字典序排序 int Comp(const void *p1,const void *p2) { return strcmp((*(Node *)p1).str,(*(Node *)p2).str); } qsort(s,100,sizeof(s,Comp); 6、计算几何中求凸包的Comp //以下是俺从别人那儿抄来的,暂时还没用过 int Comp(const void *p1,const void *p2) //重点Comp函数,把除了1点外的所有的点旋转角度排序 { struct point *c=(point *)p1; struct point *d=(point *)p2; if( cacl(*c, *d,p) 《 0) return 1; else if(!cacl(*c, *d, p) && dis(c-》x,c-》y,p.x,p.y) 《 dis(d-》x,d-》y,p.x,p.y ) ) //如果在一条直线上,则把远的放在前面 return 1; else return -1; } P.S.:qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中, 是根据二分发写的,其时间复杂度为n*log(n),其结构为: void qsort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,const void *)); 其中: *base 为要排序的数组 nelem 为要排序的数组的长度 width 为数组元素的大小(一字节为单位) (* Comp)(const void *p1,const void *p2) 为判断大小函数的指针,这个函数需要自己定义,如果p1》p2, 函数返回-1;a《b,函数返回1;a==b函数返回0。希望采纳
很奇怪 用qsort进行简单的排序,但是有些地方不懂 如下面的那样
这个问题很明显么。。。。首先,s 是全局变量,会被初始化。s.num 都是 0 。【从大到小的排序】:因为:for(i=1;i《=n;i++) scanf(“%d“,&s.num); 是从 s 开始存储的,【第一次】输入5 1 4 3 2 5 ,那么:s=0(初始值,不是输入值),s=1,s=4,s=3,s=2,s=5;【第一次】调用,qsort(s,n+1,sizeof(node),cmp);其实是对【从首地址 s开始】的【 n+1 个】大小为【sizeof(node)】的元素排序的,两个元素的【比较法则是cmp】。可以看到,参与排序的元素是 s~s ,一共 6 个元素。【第一次】排序结果是:s=5,s=4,s=3,s=2,s=1,s=0;输出是从第 1 个元素开始(不是第 0 个元素)开始的,因此,【第一次】输出:4 3 2 1 0 ,不是期望的输出结果。注意输出最后一个 0 是原来的 s ,而输入的 5 是现在的 s,没有被输出!【第二次】输入5 1 4 3 2 5 ,那么:s=5(上次排序后遗留的结果,不是输入值),s=1,s=4,s=3,s=2,s=5;【第二次】排序结果是:s=5,(不确定是哪个 5)s=5,(不确定是哪个 5)s=4,s=3,s=2,s=1;输出是从第 1 个元素开始(不是第 0 个元素)开始的,因此,【第二次】输出:5 4 3 2 1 ,是期望的输出结果。但这只是偶然!如果你输入:5 1 4 3 2 55 1 4 3 2 65 1 4 3 2 75 1 4 3 2 85 1 4 3 2 9...你会发现,输出都是:5 4 3 2 1 ! 【从小到大的排序】:很明显,这个时候,你输入的数字大于 0 , 那么 s = 0 , (初始值,不是输入值),s 的值 0 永远不会在调用 qsort 函数中移动位置,它永远停留在原来的位置上!可以当做不存在。但是,当你输入小于 0 的数字,就会出现问题! 比如你输入: 2 -1 -2你会发现输出是:-2 0 , 而不是 -1 -2上面的问题是 qsort 没有写正确的原因!正确的 qsort 写法是:qsort(s+1,n,sizeof(node),cmp);
关于c语言中qsort函数的用法
引自 http://hi.baidu.com/sysucs/blog/item/4f9962f422d2c2ddf2d385fd.html qsort,包含在stdlib.h头文件里,函数一共四个参数,没返回值.一个典型的qsort的写法如下qsort(s,n,sizeof(s),cmp);其中第一个参数是参与排序的数组名(或者也可以理解成开始排序的地址,因为可以写&s); return(0);}
C++中qsort怎么用
C++的qsort其实是一个回调函数,最重要的就是最后一个参数,它使用的是函数指针,使用的时候把某个函数名赋给这个函数指针就可以用了。所以关键的地方就是你如何定义这个compare函数了!楼上的同学例子给的很好,当然你还可以使用其他数据类型如float,double,char等等。 其实这个函数目的就是为了实现重载,因为它是用c语言写的,所以得用回调函数来实现重载。
c++中的标准库函数qsort怎么用有什么作用
功 能: 使用快速排序例程进行排序用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序亲 ,学会自己百度吧,不能太懒
更多文章:

源代码安全管理规范?如何导出备份SVN源代码库及导入源代码库
2025年3月25日 10:40

jfinal框架教程(使用jfinal框架验证登录时应该使用什么方法)
2025年2月26日 13:50

没有sql server配置管理器(SQL Server2008可以用SSMS,但找不到SQL Server配置管理器这是怎么回事)
2025年2月28日 12:50

phptrim(如何使用PHP来trim换行和空格的字符串)
2025年3月10日 00:30

string的split方法(String类的splite方法使用注意几点的地方)
2025年3月22日 19:50

谷歌浏览器安卓下载(每个手机都自带浏览器,有必要下载别的浏览器吗)
2025年2月15日 11:00

statesman和politician(stateman和polician区别)
2025年4月4日 18:40

fopen函数的功能和用法(c++中fopen函数读文件怎么用文件数据)
2025年3月28日 22:20

powershell管理员怎么打开(如何使用域管理员账号,启动 PowerShell)
2025年2月18日 01:30

linux crontab命令详解(linux计划任务crontab配置文件中的最后一个星星代表)
2025年2月22日 18:40

session setattribute(session.setAttribute(“username“,username);)
2025年2月15日 05:40

gummy是什么意思(gummy日与夜翻译歌词中文 不是音译 每句的意思)
2025年3月31日 09:40