qsort用法(qsort用法是什么)

2025-03-10 15:30:02 0

qsort用法(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 指向函数的指针,用于确定排序的顺序亲 ,学会自己百度吧,不能太懒

qsort用法(qsort用法是什么)

本文编辑:admin

更多文章:


源代码安全管理规范?如何导出备份SVN源代码库及导入源代码库

源代码安全管理规范?如何导出备份SVN源代码库及导入源代码库

本文目录源代码安全管理规范如何导出备份SVN源代码库及导入源代码库源代码安全管理规范推荐使用SDC沙盒,使用驱动层加密技术,沙盒加密是个容器,和软件类型无关,文件大小无关,文件存在电脑里不需要人为设置,而且可以禁止截屏、禁止拷贝文档里的内容

2025年3月25日 10:40

jfinal框架教程(使用jfinal框架验证登录时应该使用什么方法)

jfinal框架教程(使用jfinal框架验证登录时应该使用什么方法)

本文目录使用jfinal框架验证登录时应该使用什么方法jfinal框架怎么用java代码创建数据表浅谈java框架jfinal和nutz的区别JFinal框架怎么实现页面登录统计使用jfinal框架,查询功能有没有极简的设计方案jfinal

2025年2月26日 13:50

没有sql server配置管理器(SQL Server2008可以用SSMS,但找不到SQL Server配置管理器这是怎么回事)

没有sql server配置管理器(SQL Server2008可以用SSMS,但找不到SQL Server配置管理器这是怎么回事)

本文目录SQL Server2008可以用SSMS,但找不到SQL Server配置管理器这是怎么回事没有SQL Server(MSSQLSERVER)服务,怎么回事没有SQL Server 2005的服务管理器如何打开sql server

2025年2月28日 12:50

phptrim(如何使用PHP来trim换行和空格的字符串)

phptrim(如何使用PHP来trim换行和空格的字符串)

本文目录如何使用PHP来trim换行和空格的字符串php中trim是做什么用的php中trim()函数的作用如何使用PHP来trim换行和空格的字符串$order = array(“\r\n“, “\n“, “\r“);$replace =

2025年3月10日 00:30

folk怎么读(用英语国家怎么读)

folk怎么读(用英语国家怎么读)

本文目录用英语国家怎么读人们用英语怎么用英语国家怎么读nation  英  n. 国家;民族;国民n. (Nation)人名;(英)内申短语Ammu Nation 武器商店 ; 首先到街旁的兵器商店 ; 去武器店Political nati

2025年4月2日 07:10

string的split方法(String类的splite方法使用注意几点的地方)

string的split方法(String类的splite方法使用注意几点的地方)

本文目录String类的splite方法使用注意几点的地方关于String类中split方法的问题String类的split方法怎么用“string .split”的用法是什么C#的String.Split()方法是什么意思string.s

2025年3月22日 19:50

谷歌浏览器安卓下载(每个手机都自带浏览器,有必要下载别的浏览器吗)

谷歌浏览器安卓下载(每个手机都自带浏览器,有必要下载别的浏览器吗)

本文目录每个手机都自带浏览器,有必要下载别的浏览器吗可以推荐一些特别良心的手机浏览器吗每个手机都自带浏览器,有必要下载别的浏览器吗是否要下载别的浏览器主要看个人的需要,如果没有特别的需求,只是简单浏览网页我认为可以不用下载别的浏览器,毕竟自

2025年2月15日 11:00

path什么意思中文(path是什么意思中文)

path什么意思中文(path是什么意思中文)

本文目录path是什么意思中文path什么意思中文翻path的中文意思是什么path中文是什么JAVA中path 什么意思path中文是什么意思path是什么意思path是什么意思中文path 英 复数:paths 望采纳,谢谢pat

2025年3月13日 14:50

to是什么意思中文(to 的中文意思是什么)

to是什么意思中文(to 的中文意思是什么)

本文目录to 的中文意思是什么to翻译成中文to中文是什么tO翻译成中文是什么to是什么意思to中文字是什么To是什么意思to什么意思中文to 的中文意思是什么toprep.到; 向,朝着; 关于; 属于; adv.朝一个方向的; 到某种状

2025年2月14日 11:40

statesman和politician(stateman和polician区别)

statesman和politician(stateman和polician区别)

本文目录stateman和polician区别statesman 和politicians在语义上的区别stateman和polician区别politician和statesman的区别:意思不同、用法不同、侧重点不同一、意思不同1.po

2025年4月4日 18:40

div加滚动条自动滚动(div 如何加滚动条)

div加滚动条自动滚动(div 如何加滚动条)

本文目录div 如何加滚动条如何使DIV的高度固定,当超出固定高度时,出现自动滚动条div添加滚动条DIV 值添加纵向滚动条如何给DIV添加滚动条如何让一个div的滚动条自己滚动div怎么添加滚动条div 如何加滚动条div 加滚动条的两种

2025年3月24日 11:10

exclusively翻译(“外企”用英语怎么说啊)

exclusively翻译(“外企”用英语怎么说啊)

本文目录“外企”用英语怎么说啊请问这几句英文的翻译多谢“外企”用英语怎么说啊外企,其实是中文的简称,指的是“外商投资企业”,这里有两种可能,一是独资企业,而是合资企业。分别翻译如下:1、外资企业:foreign-capital enterp

2025年3月3日 10:20

php简单的接口编写示例(php怎么写接口)

php简单的接口编写示例(php怎么写接口)

本文目录php怎么写接口php 接口大概要怎么写php中的API接口怎么写 php如何开发API接口php写一个类实现一个接口的例子php怎么写api接口php接口开发教程php中如何调用接口以及编写接口代码详解php怎么写接口接口是什么?

2025年2月25日 10:00

fopen函数的功能和用法(c++中fopen函数读文件怎么用文件数据)

fopen函数的功能和用法(c++中fopen函数读文件怎么用文件数据)

本文目录c++中fopen函数读文件怎么用文件数据fopen函数用法c语言fopen函数的介绍DAVE编程fopen怎么用C语言fopen函数和其参数C语言Fopen函数的用法C语言文件操作函数freopen的用法请教一下php 中fope

2025年3月28日 22:20

进程间通信机制(简述Linux进程间通信的几种方式)

进程间通信机制(简述Linux进程间通信的几种方式)

本文目录简述Linux进程间通信的几种方式进程间通信的机制有哪些进程之间有哪几种通信方式总结:linux进程间通信的几种机制的比较及适Linux进程间通信的方式有哪些进程间通信的方式进程间的通信方式各有什么优缺点进程间通信的方式有哪些lin

2025年2月15日 03:10

powershell管理员怎么打开(如何使用域管理员账号,启动 PowerShell)

powershell管理员怎么打开(如何使用域管理员账号,启动 PowerShell)

本文目录如何使用域管理员账号,启动 PowerShellpowershell 用管理者权限打开cmd窗口win10开始菜单变成白色鼠标点击开始菜单关机 整个菜单变白并无法点击选取任何东西 右键好用powershell如何获取管理员权限Win

2025年2月18日 01:30

linux crontab命令详解(linux计划任务crontab配置文件中的最后一个星星代表)

linux crontab命令详解(linux计划任务crontab配置文件中的最后一个星星代表)

本文目录linux计划任务crontab配置文件中的最后一个星星代表Linux crontab的一条语句解析linux计划任务crontab配置文件中的最后一个星星代表linux计划任务crontab配置文件中的最后一个星星代表所有可能的值

2025年2月22日 18:40

session setattribute(session.setAttribute(“username“,username);)

session setattribute(session.setAttribute(“username“,username);)

本文目录session.setAttribute(“username“,username);js中的session.setAttribute怎么用作用:session . setAttribute(“login” ,”ye”); sessi

2025年2月15日 05:40

gummy是什么意思(gummy日与夜翻译歌词中文 不是音译 每句的意思)

gummy是什么意思(gummy日与夜翻译歌词中文 不是音译 每句的意思)

本文目录gummy日与夜翻译歌词中文 不是音译 每句的意思gummy的because of you是什么意思gummy日与夜翻译歌词中文 不是音译 每句的意思낮과 밤 - 거미日与夜 - Gummy어디 있는지 무얼 하고 있는지你在何处

2025年3月31日 09:40

excel网页版(如何把excel做成网页)

excel网页版(如何把excel做成网页)

本文目录如何把excel做成网页网页版Excel 与一般的Excel 有什么区别除了Google Docs 之外还有网页版的 Excel 吗excel常用快捷键有哪些,快捷键具体作用是什么--Weboffice2010网页版为什么用不了如何

2025年2月17日 06:20

近期文章

本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索