一:快速排序模板
#include<iostream>
using namespace std;
int n;
const int N=1e6+10;
int q[N];
void quick_sort(int q[],int l,int r)
{
if(l>=r)return;
int i=l-1,j=r+1,x=q[l+r>>1];
while(i<=j)
{
do i++;while(x<=q[i]);
do j--;while(x>q[j]);
if(i<=j)swap(q[i],q[j]);
}
}
int main()
{
int i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&q[i]);
quick_sort(q,0,n-1);
for(i=0;i<n;i++)
printf("%d ",q[i]);
return 0;
}
二:归并排序模板
#include<iostream>
#include<algorithm>
using namespace std;
int n;
const int N=1e6+10;
int q[N],tmp[N];
void mergesort(int q[],int l,int r)
{
if(l>=r)return;
int mid=r+l>>1;
mergesort(q,l,mid),mergesort(q,mid+1,r);
int k=0,i=l,j=mid+1;
while(i<=mid&&j<=r)
{
if(q[i]<=q[j])
tmp[k++]=q[i++];
else
tmp[k++]=q[j++];
}
while(i<=mid)tmp[k++]=q[i++];
while(j<=r)tmp[k++]=q[j++];
for(i=l,j=0;i<=r;j++,i++)q[i]=tmp[j];
}
int main()
{
int i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&q[i]);
mergesort(q,0,n-1);
for(i=0;i<n;i++)
printf("%d ",q[i]);
return 0;
}
三:DFS(深度优先搜素算法)
1、基本概念
深度优先搜索算法(depth first search, 简称dfs) 是一种用于遍历或搜索树或图的算法。沿着数的深度遍历树的节点,尽可能深的搜索树的分支。当节点v所在边都已被探寻或者在搜索时节点不满足条件, 搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有满足条件的所有节点被访问为止。
2、算法思路
深度优先遍历图的方法是,从图中某顶点v出发:
(1)访问顶点v;
(2)依次从v的未被访问的邻接节点出发,对图进行深度优先遍历,直至途中和v有路径相通的顶点都被访问;
(3)若此图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直至图中所有顶点均被访问为止。
四:
二、BFS(广/宽度优先遍历)
1、基本概念
已知图G=(V, E)和一个源顶点s,宽度优先搜索以一种系统的方式探寻G的边,从而“发现”s所能到达的所有顶点,并计算s到所有这些顶点的距离(最少边数),该算法同时能生成一棵根为s且包括所有可达顶点的宽度优先树。对从s可达的任意顶点v,宽度优先树中从s到v的路径对应于图G中从s到v的最短路径,即包含最小边数的路径。
2、算法思路
之所以称之为宽度优先算法,是因为算法自始至终一直通过已找到和未找到顶点之间的边界向外扩展,就是说,算法首先搜索和s距离为k的所有顶点,然后再去搜索和S距离为k+l的其他顶点。