快速排序(qsort and sort)
来源:互联网 发布:python参考手册 第4版 编辑:程序博客网 时间:2024/05/21 23:00
初学qsort,觉得排序函数还是十分麻烦的。
注意:1.qsort中用-,而sort中用<
2.qsort中最好用const void*a,const void*b,再强制转换指针,而sort中可以用NODE a , NODE b
1.qsort函数:
原 型: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));
功 能: 使用快速排序例程进行排序
参 数:
1 待排序数组首地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
说 明:qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n)。
qsort要求提供的函数是需要自己定义的一个比较函数,比较函数使得qsort通用性更好。有了比较函数qsort可以实现对数组、字符串、结构体等结构进行升序或降序排序。
如int cmp(const void *a, const void *b)中有两个元素作为参数(参数的格式不能变的。)返回一个int值,如果比较函数返回大于0,qsort就认为a > b,返回小于0,qsort就认为a < b。qsort知道元素的大小了,就可以把大的放前面去。如果你的比较函数返回本来应该是1的(即a > b),而却返回-1(小于0的数),那么qsort认为a < b,就把b放在前面去,但实际上是a > b的,所以就造成了降序排序的差别了。简单来说,比较函数的作用就是给qsort指明元素的大小事怎么比较的。
2.qsort中几种常见的cmp函数:
一、对int类型数组排序
int num[100];
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];
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);
3.sort和qsoort比较:
1.cmp函数和qsort中cmp函数的不同
int cmp(const int &a,const int &b)
{
return a>b
}
Sort中的cmp函数参数可以直接是参与比较的引用类型。
2.cmp函数比较时qsort用“-”,而sort用”>”.这也是一个重要的区别。
3.sort函数是c++中标准模板库的的函数,在qsort()上已经进行了优化,根据情况的不同可以采用不同的算法,所以较快。在同样的元素较多和同样的比较条件下,sort()的执行速度都比qsort()要快。另外,sort()是类属函数,可以用于比较任何容器,任何元素,任何条件。使用时需调用<algorithm>
sort(begin(),end(),cmp),
<a href="http://www.cnblogs.com/BeyondAnyTime/archive/2012/05/22/2513776.html" target=_blank>qsort</a>
- 快速排序(qsort and sort)
- 排序(sort qsort)
- 快速排序qsort和sort的用法
- 快速排序函数sort和qsort
- 快速排序--自行实现+qsort+sort
- 快速排序qsort,sort函数用法
- 快速排序(qsort)
- sort,qsort排序 (C++)
- 快速排序算法(qsort)
- qsort(快速排序)用法
- 快速排序算法(Qsort)
- 快速排序 qsort()函数
- 快速排序的库函数qsort与sort的使用方法
- 快速排序 C语言的qsort 以及 C++的 sort
- 快速排序 C语言的qsort及C++的sort
- 快速排序~sort&qsort的用法~以C++
- 快速排序算法手工实现及qsort、sort运用
- c++排序函数(sort() && qsort())详解
- 记录帖:Textview在android代码中可以动态的设置字号单位
- [Leetcode] Valid Parentheses
- SG函数
- 编写软件测试用例需要注意哪些
- poj-2888 Magic Bracelet
- 快速排序(qsort and sort)
- HDU 1069 – Monkey and Banana
- 什么才算是真正的编程能力?
- 【system】VMware虚拟机 CentOS 6.6系统安装配置详细图文教程
- I学霸官方免费教程三十三:Java集合框架之Map集合
- c++ 操作 xlsx
- java-后台生成图表、并将图表保存为PNG图片
- 教你透彻了解红黑树
- poj 1273 Drainage Ditches(网络流模版题)