C语言函数qsort的使用方法
qsort函数stdlib.h文件中,函数原型为
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
对int类型数组排序
int num[100];
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}
qsort(num,100,sizeof(num[0]),cmp);
对double类型数组排序
int Mycmp(const void *a ,const void * b)
{
return (*(double *)a>*(double * )b?1:-1);
}
struct ln{
double data;
int x;
int y;
};
int Mycmp2(const void *a ,const void * b)
{
return (((ln *)a)->data>((ln *)b)->data?1:-1);
}
对结构体二级排序
struct ln{
int x;
int y;
};对x按升序排列,如果x相同,则y按降序排列
int Mycmp1(const void *a ,const void * b)
{
return (((ln *)a)->data>((ln *)b)->data?1:-1);
} //升序int Mycmp2(const void *a ,const void * b)
{
if(((ln *)a)->data==((ln *)b)->data)
return (((ln *)a)->x>((ln *)b)->x?-1:1);
}//降序int Mycmp2(const void *a ,const void * b) //这个函数和上面两个函数之和的功能相同
{
if(((ln *)a)->data==((ln *)b)->data)
return (((ln *)a)->x>((ln *)b)->x?-1:1);
else
return (((ln *)a)->data>((ln *)b)->data?1:-1);}
对字符串进行排序
int Mycmp3(const void *a ,const void * b)
{
return strcmp(((ln *)a)->str,((ln *)b)->str);
}对字符串二维数组排序完整代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>char s[2001][1001];
int cmp(const void *a, const void *b){
return strcmp((char *)a,(char *)b);
}int main(){
int i,n;
scanf("%d",&n);
getchar();
for(i=0;i<n;i++) gets(s[i]);
qsort(s,n,1001*sizeof(char),cmp);
for(i=0;i<n;i++) puts(s[i]);
return 0;
}END
注意事项
qsort函数中的第四个参数为函数指针,函数名称即是函数指针,int (* cmp)(const void * a,const void * b),其中指针a,b指向的是qsort中第三个参数指定的类型变量;
C语言函数qsort的使用方法的更多相关文章
- C语言函数实现的另类方法
在前面看过那个BT的Javascript程序后,我们来看一个C语言的,相信大家还记得输出从1到1000的数最后的那个示例,本站还有很多这样的示例,如:变态的hello word,如何教新手编程,还有恐 ...
- 从linux0.11中起动部分代码看汇编调用c语言函数
上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一 ...
- C语言函数指针实验
上次看Atmel的示例工程,发现人家使用了函数指针的结构体(函数指针结构体).感叹人家的C语言功夫审核,自己费劲还是只能读懂的份.不过,函数指针确实好用.今天就试试这个超牛的东西.Now let's ...
- C语言(函数)学习之strstr strcasestr
C语言(函数)学习之[strstr]&[strcasestr]一.strstr函数使用[1]函数原型char*strstr(constchar*haystack,constchar*needl ...
- C语言函数指针基础
本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...
- 动态修改 C 语言函数的实现
Objective-C 作为基于 Runtime 的语言,它有非常强大的动态特性,可以在运行期间自省.进行方法调剂.为类增加属性.修改消息转发链路,在代码运行期间通过 Runtime 几乎可以修改 O ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
- Go 语言函数
函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回类型,和参数. ...
- Go语言函数
目录 函数定义 函数返回多个值 函数参数 Go 语言函数值传递 Go语言函数引用传递 函数用法 函数作为值 匿名函数 闭包 方法 不定参数的函数 init函数 内建函数 函数调用机制 总结 函数定义 ...
随机推荐
- WinForm设置控件焦点(转)
http://blog.csdn.net/zlwzlwzlw/article/details/8573921 winform窗口打开后文本框的默认焦点设置,进入窗口后默认聚焦到某个文本框,两种方法: ...
- javascript 操作元素属性的方法
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- HTML5的结构学习(3) --- 综合运用
前面学习了HTML5新增的主体结构元素和新增的非主体结构元素, 而这里我们来学习如何去综合的运用这些新增元素. 1.大纲 HMTL5元素的关键就是将显示内容和便签类型紧密相关,提高了代码的语义化和可读 ...
- 三角形(hd1249)
三角形 Problem Description 用N个三角形最多可以把平面分成几个区域? Input 输入数据的第一行是一个正整数T(1<=T<=10000),表示测试数据的数量.然后 ...
- NHbiernate 配置
1.从网上下载NHibernate 4.0 文件.下载地址:https://sourceforge.net/projects/nhibernate/ 2.解压后把 NHibernate.dll文件引用 ...
- js监听和观察者模式
http://redhacker.iteye.com/blog/1756436 https://developer.mozilla.org/en-US/docs/Web/Guide http://ww ...
- stream~filestream
http://blog.csdn.net/feliciafay/article/details/6157356 http://blog.csdn.net/feliciafay/article/deta ...
- C++之单元测试
以前编写程序从没有做过单元测试的工作,所以在后期会花很多时间去纠错,这也就是软件工程中的2:8定律.最近要完成一个项目,要求要对系统中的主类和主函数作出单元测试的保证,才去查找了相关方面的资料,看过后 ...
- java设计模式--行为型模式--命令模式
命令模式 概述 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作. 适用性 .抽象出待执行的动作以参数化某对象. .在不同的时刻指定.排 ...
- ROS的tf_tree相关
1.相关问答 http://answers.ros.org/question/11682/robot_pose_ekf-with-an-external-sensor/ http://ros-user ...