最近开始学习排序。排序的作用不必多说,目前所见的比较坑的题不是用高精度运算就是用排序。正如Gromah大神所说:“不会排序学什么信息学竞赛啊!”于是在此总结一下,以便下一步学习。以下是目前学会的几个较简单的排序。
参考资料:
《信息学竞赛一本通》、《算法竞赛入门经典》、以及一个排序示意软件及其代码的所在网站:
http://panthema.net/2013/sound-of-sorting
正文:
选择排序:
原理:每一次排序从待排数据中选出一个最值元素,顺序放在待排序的数列的最前,直到全部待排序的数据元素排完。
算法复杂度:O(n^2)
实现:
void ssort() //SelectSort
{
int i,n,temp,k=1;
scanf("%d",&n)
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
for(int i=1;i<=n-1;++i)
{
for(int j=1;j<=n;++j)
{
if(a[j]<a[k])k=j;< p="">
}
if(k!=1)
{
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
for(int i=1;i<=n;++i)printf("%d ",a[i]);
printf("/n");
}
冒泡排序: