qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n)
功 能: 使用快速排序例程进行排序头文件:stdlib.h
用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
2 数组中待排序元素数量
3 各元素的占用空间大小
注意比较函数的格式int (*fcmp)(const void *,const void *)
返回值为int,参数为const void*
基于int型数组排序:
int compare(const void* arg1,const void* arg2)
{
return *(int*)arg1-*(int*)arg2;
}
基于char型数组:
int compare(const void* arg1,const void* arg2)
{
return *(char*)arg1-*(char*)arg2;
}
基于double型数组:
int compare(const void* arg1,const void* arg2)
{
return (*(double*)arg1>*(double*)arg2)?1:-1;
}
基于字符串数组:
int compare(const void* arg1,const void* arg2)
{
return strcmp((char*)arg1,(char*)arg2);
}
sort函数是c++中标准模板库的的函数,在qsort()上已经进行了优化,根据情况的不同可以采用不同的算法,所以较快。在同样的元素较多和同样的比较条件下,sort()的执行速度都比qsort()要快。另外,sort()是类属函数,可以用于比较任何容器,任何元素,任何条件。使用时需调用#include<algorithm> using namespace std;
这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。
如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。比较函数是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。想把刚才的整数数组按降序排列,可以先定义一个比较函数cmp
bool cmp(int a,int b)
{
return a>b;
}
排序的时候就写sort(a,a+100,cmp);
自定义类型:重载()参数格式为const int&
class myless
{
public:
bool operator()( const int &a, const int &b) {
return a < b;
}
};
int main(int argc, char* argv[])
{
vector<int> vec;
vector<int>::iterator i;
vec.push_back (10);
vec.push_back (3);
vec.push_back (7);
sort(vec.begin(), vec.end(), myless()); // Sort the vector
for (i = vec.begin(); i != vec.end(); i++)
{
cout<<*i<<endl;
}
return 0;
}