今天又是一个值得纪念的日子;
荀彧同学敲完了第一本书——《入门篇》;
奈何由于学校资源问题,荀彧同学拿到了某高一学长学姐用过的《提高篇》;
准备开始自己的信奥提高生涯;
打开书发现第二单元前半部分还是排序;
忽然意识到排序可以说是很重要了;
所以还是要整合一下;
那么,let's start!
1>选择排序;
基本思想:处理第i个元素的时候,找到它后面所有数的最小值。如果这个最小值比它小,就相互交换;//其实荀彧同学认为这个
思想和找最小值是一样的,只不过找最小值是找一个数,这个是找到小的值把它往前面放罢了;
放代码:
void swap_sort(int start,int end){
int temp;
for(int i=start;i<end;i++)
for(int j=i+1;j<end;j++)
if(a[i>a[j])
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
其实这是一个很简单的思想;
稍微看看就能搞懂的;
没有高精度那么烦;
也没有进制这么猥琐;
end...
2>冒泡排序;
基本思想:对相邻两个元素进行比较,并将较小的数放到前面。重复n组即可完成排序;
不多说直接上代码:
void bubble_sort(int start,int end)
{
int temp;
for(int i=start;i<end;i++)
for(int j=end;j>i;j--)
if(a[j-1]>a[j])
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
很可爱的名字;
像小鱼吐泡泡似的;
用起来也很简单;
类似于选择排序;
end...
3>插入排序;
基本思想:前i个元素都已经排好,然后把第i+1个数插入到合适的位置上;
上代码:
void ins_sort()
{
for(int i=2;i<=n;i++)
{
a[0]=a[i];
for(int j=i-1;a[j]>a[0];j--)
a[j+1]=a[j];
a[j+1]=a[0];
}
}
这三种代码各有各的优势吧;
但是!!!
最简单的还在下面;
end...
4>使用STL算法;
其实只有一行很皮的代码:
sort(a,a+n);
没了;
看具体情况运用嘛;
很方便的;
end...
5>桶排序;
基本思想:设计M个桶(数组的下标),根据元素本身进行分配。因为M个桶是按照顺序排列的,所以分配元素之后元素也会按
顺序排列;
代码在此:
int cnt[M+10];
memset(cnt,0,sizeof(cnt));//在cstring库中,将数组整体置0
for(int i=0;i<N;i++)
cnt[a[i]]++;//从cnt[0]开始挨个列举,例如
for(int i=0;i<M;i++)
while((cnt[i]--)>0)
cout<<i<<' ';
还是一个很有意思的排序;
只不过能用的范围比较小罢了;
end...
最后,其实还有很多大佬的排序方法;
快速排序、归并排序、计数排序、二叉树排序什么的;
荀彧同学还没有学到;
以后学到了在总结吧;
今天收获又是满满;
高产老母猪继续高产;
全文终;