发现很多常见功能都已经封装实现 每次却还自己吭吭的写,费力不讨好。。。
故在此记录。
排序算法
//函数名 功能描述
sort //对给定区间所有元素进行排序
stable_sort //对给定区间所有元素进行稳定排序
partial_sort //对给定区间所有元素部分排序
partial_sort_copy //对给定区间复制并排序
nth_element //找出给定区间的某个位置对应的元素
is_sorted //判断一个区间是否已经排好序
partition //使得符合某个条件的元素放在前面
stable_partition //相对稳定的使得符合某个条件的元素放在前面
sort()函数:
- 头文件:
#include<algorithm>
其实sort()并不能叫做快速排序,而应该说成智能排序;它正常情况下,会使用快排,但是发现快排恶化的话,会自动调整成其他排序来辅助。是最高效的排序。
//1.默认升序排列
sort(begin,end); //默认是从小到大排序,begin表示要排序元素的首地址,end表示要排序元素的结束地址
//2.自定义排序函数 升降序
bool cmp(int a,int b){
return a>b;//从大到小排序,从小到大排序为a<b
}
sort(begin,end,cmp);//自定义排序函数cmp,要实现从大到小排序,需要自己写排序函数
//3.使用C++ STL强大功能实现排序规则,
//从小到大排序,比较函数设置为:less<数据类型>
//从大到小排序,比较函数设置为:greater<数据类型>
sort(a,a+10,greater<int>);//从大到小排序,从小到大则为less<int>
qsort() 函数
- 头文件:
#include<stdlib.h>
根据给定的比较函数给一个数组快速排序,是通过指针移动实现排序功能。排序之后的结果仍然放在原来数组中
qsort(数组名,数组元素个数,每个元素大小,比较函数);
qsort(a,n,sizeif(a[0]),cmp);
针对数组, vector 不可以直接使用
//自定义比较函数,从大到小排序
int compare(const void *a,const void *b)
{
return *(int*)b-*(int*)a;//从大到小排序,若从小到大牌组为:*(int*)a-*(int*)b
// 如果是字符型,就把int换为char。
}
qsort((void*)a,20,sizeof(int),compare);