sort和qsort使用模板
来源:互联网 发布:海纳百川软件用不了 编辑:程序博客网 时间:2024/06/08 06:02
写在最前面的
在csdn上开了一个博客,一直就听说这里挺火的,更重要的是,能和大牛们学习,受益匪浅啊。我非常喜欢UI编程,对VC很热衷,同时我也喜欢上了算法,但是数学一直是个瓶颈,一直都是“半桶水”,尽管如此,我还是会在博客中写写讨论有关UI和算法的学习笔记(算不上是什么文章咯。^_^),希望可以共同学习进步。
另外,外链一个博客,捣乱小子,这是我的同名博客,以前一直在那里混。下面是我的第一篇,特别水啊...在c/c++当中,有很多的模板可以用。下面介绍一下sort和qsort,学习笔记。
sort和qsort的使用
sort和qsort的使用方法。
template<class RandomAccessIterator> void sort( RandomAccessIterator _First, RandomAccessIterator _Last );template<class RandomAccessIterator, class Predicate> void sort( RandomAccessIterator _First, RandomAccessIterator _Last, Predicate _Comp );
在MSDN上如是说,来个最简单的数组排序。
#include <iostream>#include <algorithm>using namespace std;bool cmp(int &a,int &b){return a<b;}//返回true是升序,返回false是降序void show(int *a,int n){for(int i=0; i<n; i++)cout << a[i] << " ";cout << endl;}int main(){//测试数据int a[5] = {5,4,3,2,1};sort(a,a+5,cmp);show(a,5);}
sort不仅仅基于基本数据类型的排序。假设,有一个学生信息的数据结构:
struct student{int num;char name[20];int mark;}s[100];
接着,假想s[100]已经填充了数据,有需求要将100个学生按照mark成绩的顺序来排序,那么同样可以用上面的方法来解决。但是在cmp函数需要小小的修改,学号和姓名会随着成绩“走”。
bool cmp(student &a,student &b){return a.mark<b.;}//返回true是升序,返回false是降序
又有需求,如果两个学生的成绩相同,则相同成绩的学生排序需要按照学生姓名的字典顺序(abcd...不分大小写)来排序。同样修改cmp就可以。
bool cmp(student &a,student &b){if(a.mark==b.mark)return strcmp(a.name,b.name);return a.mark<b.mark;}//返回true是升序,返回false是降序
qsort听说比sort低效,不是很清楚,但是也经常用。MSDN上如是说:
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *, const void *) );
简单数组排列的例子:
#include <iostream>#include <algorithm>using namespace std;int cmp(const void * a,const void * b){int * pa = (int *)a,* pb = (int *)b;return *pa-*pb;}void show(int *a,int n){for(int i=0; i<n; i++)cout << a[i] << " ";cout << endl;}int main(){int a[5] = {5,4,3,2,1};//sort(a,a+5,cmp);qsort(a,5,sizeof(int),cmp);show(a,5);}
同样,学生成绩排序情况也可以这样。主要是修改cmp
int cmp(const void * a,const void * b){student * pa = (student *)a,* pb = (student *)b;if(pa->mark==pb->mark)return strcmp(pa->name,pb->name);return pa->mark-pb->mark;}
都是算法里面的模板来的,做题的时候用得着。
本文完。2012-03-19
捣乱小子 http://blog.csdn.net/daoluanxiaozi
- sort和qsort使用模板
- 库函数sort 和 qsort的使用
- sort&qsort排序使用
- 关于sort 和 qsort
- qsort() 和 sort()
- qsort和sort
- sort()和qsort()
- sort和qsort排序
- sort和qsort
- sort和qsort排序
- sort和qsort排序
- sort和qsort
- sort 和 qsort比较
- qsort和sort
- sort和qsort排序
- sort和qsort
- STL中的sort,和qsort的使用和区别
- C/C++中关于qsort和sort函数的使用
- 解决View中的onDraw 不会自动调用
- VideoLAN---VLC源代码分析
- SQL 行转列 详细分析
- C#实现窗体圆角的一种方法
- 温总理历次发言引用古诗文
- sort和qsort使用模板
- Android之Fragment静态实现实例
- java.lang.OutOfMemoryError: GC overhead limit exceeded解决
- 常用sql
- 如何更改XP系统默认字体 <讨论话题>……
- 页面数据导出CSV格式文件
- 导出EXCEL以HTML代码向excel输出不是标准的excel 方法直接可用
- 翻译真是件痛苦活....我忍
- 更改常用系统默认字体的方法