qsort函数(快速排序用法举例)
来源:互联网 发布:linux运维面试简历项目 编辑:程序博客网 时间:2024/05/22 06:07
上一篇讲了sort函数的用法,现在讲讲库函数qsort的用法,qsort是快速排序的库函数,包含头文件#include”stdlib.h”,其函数原型如下:
void qsort(void *base,int nelem,int width,int(*fcmp)(const void *,const void*));
各参数代表的含义是:
1:待排序数组首地址; 2:数值中待排序元素数量;
3:各元素的占用空间大小;4:指向函数的指针(实际运用中函数名就是函数指针)。
下面按照数组元素的数据类型分类讲解qsort函数的用法。针对不同应用场景选用合适的cmp函数,可以快速简便的实现排序。
A:整型数据
#include "iostream"#include "stdlib.h"using namespace std;int cmp(const void*a,const void*b)//降序,qsort函数默认升序,而实现升序规则只需调换成a-b的形式即可{return *(int*)b-*(int*)a;}int main(){int a[6]={1,2,3,4,5,6},i;qsort(a,6,sizeof(int),cmp); // a是被排序的数组 6是排序元素的个数 //sizeof(int)是每个元素所占的字节数 cmp是排序规则for(i=0;i<6;i++) //输出printf("%d ",a[i]);return 0;}运行结果为:
B:char 型数据(以下只给出关键实现代码,不做结果展示)
int cmp(const void*a,const void*b){return *(char*)a-*(char*)b;}char c[10];qsort(c,10,sizeof(char),cmp);C:double型数据(double型数据排序时不是用运算符,而是用比较符,这点需要注意)
int cmp(const void*a,const void*b){return *(double*)a>*(char*)b?;1-1;}double in[10];qsort(in,10,sizeof(double),cmp);D:结构体第一级排序(只对结构体中某个元素进行排序)
int cmp(const void*a,const void*b){return (*(double*)a).data>(*(char*)b).data?;1-1;}struct in{int data;int other;}s[10];qsort(s,10,sizeof(s[0]),cmp);E:结构体的第二级排序(先以第一个元素为规则排序,若相等则按第二个元素进行排序)这可以运用到很多不仅仅是以一个关键字进行排序的场合,很方便实用
int cmp(const void*a,const void*b)//以x从小到大排序,若相等则以y从大到小排序{struct in*c=(in*)a;struct in*d=(in*)b;if(c->x!=d->x)return c->x-d->x;elsereturn d->y-c->y;}struct in{int x;int y;}s[10];qsort(s,10,sizeof(s[0])),cmp);
以上便是qsort函数针对不同数据类型的用法,最后再附上sort函数对字符串进行排序的有趣应用,希望大家在以后编程过程中能排上用场。
F:字符串型数据用法
struct in{int data;char str[100];}s[10];int cmp(const void *a ,const void *b){return strcmp((*(in*)a)->str,(*(in*)b)->str);}qsort(s,10,sizeof(s[0]),cmp);
G:sort函数对字符串排序的用法
#include "iostream"#include "algorithm"using namespace std;bool fun(const char *s1, const char *s2){if(strcmp(s1, s2) < 0)return true;elsereturn false;}int main(){char *names[]= //sort实现字符窜的排序写法{"could","you","sort","me","please","thank","you!"};cout<<"排序前字符串为:";for(int i = 0; i < 7; ++i){cout << names[i] << ends;}cout << endl;sort(&names[0], &names[7], fun);cout<<"排序后字符串为:";for(int i = 0; i < 7; ++i){cout << names[i] <<ends;// endl;}cout << endl;return 0;}运行结果如下:
其中ends和endl的用法也是很奇妙的,有兴趣的诸君可以自行尝试。
0 0
- qsort函数(快速排序用法举例)
- qsort(快速排序)用法
- 快速排序 qsort()函数
- 快速排序qsort,sort函数用法
- 快速排序qsort用法
- 快速排序函数qsort
- qsort快速排序函数
- qsort(快速排序)的用法
- 字符串排序(qsort函数用法小结)
- 快速排序(qsort)
- 快速排序函数qsort介绍
- 【Eternallyc】qsort排序函数用法
- qsort()函数排序
- 分析C标准库中通用排序函数 qsort,并进行举例排序(数字篇)
- qsort函数 C语言快速排序函数
- C/C++ qsort()快速排序的用法
- C/C++ qsort()快速排序的用法
- 快速排序qsort和sort的用法
- 使用Unity3D50个技巧-50 Tips for Working with Unity (Best Practices)
- leetCode:Linked List Cycle II
- Linux下IPC总结
- unity3d 怎样在一定时间连按两下键
- Android 更新UI的两种方法——handler和runOnUiThread()
- qsort函数(快速排序用法举例)
- cc2530的时钟
- duilib list控件扩展
- ARM体系架构--指令篇
- 最近点对问题
- Echo Socket例子项目
- 给VS2008/VS2010 MFC项目添加启动画面
- 暴风一号 病毒 源码学习
- int类型数组中找出现几次的数的题目总结(update)