{2018.4.26}荀(gou)彧(huo)同学的排序整合时间

今天又是一个值得纪念的日子;

荀彧同学敲完了第一本书——《入门篇》;

奈何由于学校资源问题,荀彧同学拿到了某高一学长学姐用过的《提高篇》;

准备开始自己的信奥提高生涯;

打开书发现第二单元前半部分还是排序;

忽然意识到排序可以说是很重要了;

所以还是要整合一下;

那么,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...

最后,其实还有很多大佬的排序方法;

快速排序、归并排序、计数排序、二叉树排序什么的;

荀彧同学还没有学到;

以后学到了在总结吧;

今天收获又是满满;

高产老母猪继续高产;

全文终;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值