做题中常会用到排序,之前一直都在用最笨的冒泡法,一遍一遍的写下了连自己都受不了自己了,所以打算开始学一下新的排序方法,就从sort和qsort学起吧(话说这两个最简单了)。
sort包含在c++的<algorithm>头文件中,个人认为用法要比qsort简单。
先说sort的用法:
头文件:
#include <algorithm>
using namespace std;
1.默认的sort函数是按升序排。
sort(a,a+n); //两个参数分别为待排序数组的首地址和尾地址
2.可以自己写一个cmp函数,按特定意图进行排序。
例如:
int cmp( const int &a, const int &b ){
if( a > b )
return 1;
else
return 0;
}
sort(a,a+n,cmp);
是对数组a降序排序
又如:
int cmp( const POINT &a, const POINT &b ){
if( a.x < b.x )
return 1;
else
if( a.x == b.x ){
if( a.y < b.y )
return 1;
else
return 0;
}
else
return 0;
}
sort(a,a+n,cmp);
是先按x升序排序,若x值相等则按y升序排
另外cmp这个函数可以定义为bool型,这样的话代码会更加简洁。
给个例子:
struct Node
{
int p;
int q;
int v;
}node[600];
bool cmp(Node a, Node b)
{
return a.q-a.p < b.q-b.p;
}
闲话:关于bool和BOOL的区别在这篇博文中有介绍,有兴趣的话可以去看看。http://blog.csdn.net/berry666/article/details/7687821。
继续我们的讨论:
上面说的了c++中的sort,那么在c中呢?
还好,我们还有qsort:
头文件:#include <stdlib.h>
int Cmp(const void*a,const void *b)
{
int*pa=(int*)a,*pb=(int*)b;
if(*pa>*pb) return 1;
else if (*pa==*pb) return 0;
else return -1;
}
qsort(data,N,sizeof(int),Cmp); // 对int型数组进行快速排序(非降序排列)
p=(int*)bsearch(&a,data,n,sizeof(int),Cmp);
浙公网安备 33010602011771号