做题中常会用到排序,之前一直都在用最笨的冒泡法,一遍一遍的写下了连自己都受不了自己了,所以打算开始学一下新的排序方法,就从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);