STL
- sort
用于C++中,对给定区间所有元素进行排序。头文件是#include “algorithm”
如果有需要可以定义排序函数。
- set
set的特性是,所有元素都会根据元素的键值自动排序。
begin() 返回set容器的第一个元素的 地址
end() 返回set容器的最后一个元素 地址
empty() 判断set容器是否为空
size() 返回当前set容器中的元素个数
erase(it) 删除迭代器指针it处元素
insert(a) 插入某个元素 - unique
unique就是把数组伪去重,重复的数放在数组末,(听说是把不重复的放前面?)
使用它时一般是排好序了的,放回去重后的放重复元素的第一个迭代器。所以减去首元素就是它的不重复的元素的长度
unique(a,a+n)-a;
算法
- Bubble Sort
主要思想是通过单向的有序性来确定整体的有序性:总共有 数据个数-1 轮循环,每次循环把最值维护。其实就是相当于插入排序吧。
for(i=0;i<n;++i)
for(j=i;j<n;++j)
{
if(a[j]<a[i])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
- Quicksort
其实就是一种分治的思想,通过由整体到局部的有序性,自内而外地形成有序性。
inline int qsort(int l,int r)
{
int mid=a[(l+r)>>1],i=l,j=r,t;
do
{
while(a[i]<mid) ++i;
while(a[j]>mid) --j;
if(i<=j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
++i;--j;
}
}while(i<=j);
if(l<j) qsort(l,j);
if(i<r) qsort(i,r);
}
- merge sort
也是分治的思想,就是通过recursion把它切到最小,然后进行合并。
inline void merge_sort(int *a,int x,int y,int *t)
{
if(y-x>1)
{
int m=x+(y-x)/2;
int p=x,q=m,i=x;
merge_sort(a,x,m,t);
merge_sort(a,m,y,t);
while(p<m || q<y)
{
if(q>=y || (p<m && a[p]<=a[q])) t[i++]=a[p++];
else t[i++]=a[q++];
}
for(i=x;i<y;i++) a[i]=t[i];
}
}
- 二分
STL中有两个函数,分别是从小到大、从大到小,返回下标第一个大于或等于finds的下标
int ans=upper_bound(a,a+i,finds)-a;
int ans=lower_bound(a,a+i,finds)-a;