sort ) )函数1 :前言
sort函数用于c,对特定区间的所有元素进行排序。 默认值为升序,但也可以按降序排序。 sort函数的排序时间复杂度为n*log2n,比冒泡等排序算法更高效。 sort函数包含在头文件#include“algorithm”的c标准库中。
sort (开始、结束、cmp ) )。
)1) start表示排序数组的起始地址;
)2) end表示数组结束地址的下一位;
)3) cmp用于规定排序方法,可以默认为升序,无需填写。
二.实例
1 .使用以int为例的基本数据类型的sort
# include iostream # include algorithm # includecstringusingnamespacestd; int main () ) inta [5]={ 1,3,4,2,5 }; sort(a,a 5); for(intI=0; i5; I ) couta[i] '; 返回0; 由于没有cmp参数,默认情况下排序为非降序,结果如下:
1 2 3 4 5
如果设计为不按升序排序,请创建cmp函数:
BOOLCMP(inta,int b ) {return ab; }标准库中有现成的东西。 在functional中,直接使用就可以了。 functional提供了许多基于模板的比较函数对象。 它们是(看名字就知道它的意思) equal_to、not_equal_to、greater、greater_equal、less、less_equal。 对于这个问题,greater和less就足够了。 请就这样拿来使用:
升序: sort(Begin,end,lessdata-type ); 降序: sort(begin,end,greaterdata-type ().int main ) ) inta [ 20 ]={ 2,4,1,23,5,76,0,43,24,65 } for i20; I ) couta[i]endl; sort(a,a 20,greaterint ) ); for(I=0; i20; I ) couta[i]endl; 返回0; (二)参考数据类型string的使用
字符串之间的字符排序:
迭代器允许您完成顺序排序
# include iostream # include algorithm # includecstringusingnamespacestd; intmain((stringstr ) ' Helloworld ); sort(str.Begin )、str.end ); 出局; 返回0; 结果:空格dehllloorw
使用反向运动学可以完成逆序排序
# include iostream # include algorithm # includecstringusingnamespacestd; intmain((stringstr ) ' Helloworld ); sort(str.Rbegin )、str.rend ); 出局; 返回0; 结果: wroolllhde空间
字符串之间的比较排序
# include iostream # include cstring # includealgorithmusingnamespacestd; int main () ({字符串a [4]; for(intI=0; i4; I ) Getline(CIN,a[i]; sort(a,a 4); for(intI=0; i4; I ) couta[i]endl; 返回0; (三)以结构体为例的两级排序
# include iostream # include algorithm # includecstringusingnamespacestd; 结构链接{ int a,b; (; OOLCMP(linkx,link y ) if ) x.a==y.a ) return x.by.b; 返回x.ay.a; (}int main ) ) { link x[4]; for(intI=0; i4; I ) cinx[i].ax[i].b; sort(x,x 4,cmp ); for(intI=0; i4; I ) coutx[i].a' 'x[i].bendl; 返回0; }想排序:首先按a的值升序排列,如果a的值相同,则按b的值降序排列
排序结构体中的一个要素时遇到,必须用cmp函数判断。
示例:
结构节点{ int a; int b; int c; (; 向量节点; 针对c排序,针对整体排序时:
BOL CMP (节点开始,节点结束) {return start.c end.c; //按成本顺序(sort(p.begin )、p.end )、cmp );