用于C++中,对给定区间所有元素进行排序。
头文件是#include <algorithm>
sort函数见下表:
函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素部分排序 partial_sort_copy 对给定区间复制并排序 nth_element 找出给定区间的某个位置对应的元素 is_sorted 判断一个区间是否已经排好序 partition 使得符合某个条件的元素放在前面 stable_partition 相对稳定的使得符合某个条件的元素放在前面 sort函数有三个参数
1.要排序的数组的起始地址。
2.要排序数组的结束地址;
3.排序的方法,即排序是按照升序还是降序。默认的排序方法是从小到大升序排序。
MSDN中的定义:
template<class RanIt> void sort(RanIt first, RanIt last); //--> 1) template<class RanIt, class Pred> void sort(RanIt first, RanIt last, Pred pr); //--> 2)可以自己写一个cmp函数,按照特定意图进行排序。如下按照降序顺序进行排序
bool 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升序排序。
C++标准库提供了上述的功能,sort函数的第三个参数可以用如下语句告诉你采用的排序方法。
less<数据类型>()//从小到大排序
greater<数据类型>()//从大到小排序
对int数组排序可用,sort(a,a+n,less<int>())
对字符数组排序可用,sort(str,str+str.length(),less<char>())
C中的qsort是我刚学编程最常用的排序方法,附上qsort的使用方法:
#include <stdlib.h>
void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针
其中base是排序的一个集合数组,num是这个数组元素的个数,width是一个元素的大小,compare是一个比较函数。
比如:对一个长为1000的数组进行排序时,int a[1000]; 那么base应为a,num应为 1000,width应为 sizeof(int),comp函数随自己的命名。
qsort(a,1000,sizeof(int),comp);
其中comp函数应写为:
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
上面是由小到大排序,return *(int *)b - *(int *)a; 为由大到小排序。
以下为compare函数原型 //comp compare( (void *) & elem1, (void *) & elem2 ); Compare 函数的返回值 描述 < 0 elem1将被排在elem2前面 0 elem1 等于 elem2 > 0 elem1 将被排在elem2后面 对字符串进行排序
int Comp( const void *p1, const void *p2) { return strcmp (( char *)p2,( char *)p1); } int main() { char a[MAX1][MAX2]; initial(a); qsort (a,lenth, sizeof (a[0]),Comp); }