常用排序之qsort和sort
来源:互联网 发布:在淘宝上赌徒跳刀 编辑:程序博客网 时间:2024/05/21 09:05
本文对算法竞赛中常用到的两个排序函数qsort和sort的使用方法做出一些总结,重点关注它们使用时排序规则的定义。
1、qsort
函数原型:
void __cdecl qsort ( void *base, size_t num, size_t width, int (__cdecl *comp)(const void *, const void *) )
函数包含在头文件<stdlib.h>中,参数解释如下:
base: 排序起始地址
num: 排序元素数量
width: 单个元素大小
comp; 排序规则,用来比较两个元素大小的函数指针
下面讨论排序规则comp函数的写法,常写成cmp,默认升序排列:
一、对int类型排序
int num[MaxSize];int cmp(const void *a, const void *b){return *(int *)a - *(int *)b;}qsort(num, n, sizeof(num[0]), cmp);
二、对double类型排序
double num[100];int cmp(const void *a, const void *b){return *(double *)a > *(double *)b ? 1 : -1;//这里注意,浮点数是不能用等号来判断相等的}qsort(num, n, sizeof(num[0]), cmp);
三、对char类型排序
char num[100];int cmp(const void *a, const void *b){return *(char *)a - *(char *)b;}qsort(num, n, sizeof(num[0]), cmp);
四、对结构体一级排序
struct Node{int x;int y;}num[100];int cmp(const void *a, const void *b)//按x排序{struct Node *c = (Node *)a;struct Node *d = (Node *)b;return c->x - d->x;}qsort(num, n, sizeof(num[0]), cmp);
五、对结构体二级排序
struct Node{int x;int y;}num[100];int cmp(const void *a, const void *b)//按x排序,x相等时按y排序{struct Node *c = (Node *)a;struct Node *d = (Node *)b;if (c->x != d->x)return c->x - d->x;return c->y - d->y;}qsort(num, n, sizeof(num[0]), cmp);
六、对结构体数组排序(按照结构体中str的字典序排序)
struct Array{char str[100];}num[100];int cmp(const void *a, const void *b){struct Array *c = (Node *)a;struct Array *d = (Node *)b;return strcmp(c->str, d->str);}qsort(num, n, sizeof(num[0]), cmp);
2、sort
函数原型:
template <class RandomAccessIterator> void sort ( RandomAccessIterator first, RandomAccessIterator last );template <class RandomAccessIterator, class Compare> void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
函数包含在头文件<algorithm>中,可以看出,sort函数可以传递两个或三个参数,第一个参数为排序的起始地址,第二个参数为排序的终止地址,第三个参数为排序规则:
一、传递两个参数,默认升序排序
//对数组num的前n个元素排序int num[MaxSize];sort(num, num+n);//这里是num+n,也就是对num[0]到num[n-1]排序
二、有时候需要降序排序,这时候需要定义排序规则,作为第三个参数,同样用cmp来表示
bool cmp(int a, int b){return a > b;}//对数组num的前n个元素降序排序int num[MaxSize];sort(num, num+n, cmp);
一般情况下,如果能够使用sort解决问题,总是会优先使用sort函数,因为它用起来更简单。
1 0
- 常用排序之qsort和sort
- sort和qsort排序
- sort和qsort排序
- sort和qsort排序
- sort和qsort排序
- 排序库函数sort()和qsort()
- 排序函数qsort和sort
- 快速排序qsort和sort的用法
- sort和qsort对字符数组排序
- 快速排序函数sort和qsort
- sort和qsort对字符数组排序
- sort和qsort 七种qsort排序方法
- 常用查询库 qsort和sort
- [排序]SORT QSORT
- (转)[排序]SORT QSORT
- 排序(sort qsort)
- qsort-sort 排序
- qsort与sort 排序
- 2016年终总结
- android TextView属性大全
- 【OI做题记录】【BZOJ】【HAOI2007】反素数ant
- 从第二届中国域名节的成功,看域名的想象力在哪
- java随笔1
- 常用排序之qsort和sort
- 子网掩码、ip地址、主机号、网络号、网络地址、广播地址
- scoop导入数据从mysql到hive
- 链表----链表反转I
- opnet之queue之自行设计acb_fifo
- 【OI结构】约数个数公式以及它的证明
- ElasticSearch NoNodeAvailableException
- kafka集群脚本
- UI--UIView