美文网首页
1.6冒泡——一点新的感悟

1.6冒泡——一点新的感悟

作者: 吃个小烧饼 | 来源:发表于2017-09-19 01:05 被阅读4次

其实我是没打算写这个算法的,你也看出来了,不是吗。
不过我今天看到了一个实现,觉得很有意思,不妨讨论一下。
冒泡排序的核心就是:假设需要非降序排列,然后相邻元素比较,若左大于右,就交换。写出来就是:

void bsort(int a[], int n)
{
  for (int j = n-1; j >= 0; --j)
    for (int i = 1; i <= j; ++i)
    {
      if (a[i-1] > a[i])
        swap(a[i-1], a[i]);
    }
}  

之所以叫冒泡排序,就是因为每执行一次排序,就把一个最大的元素浮出去。
不过我今天看了一个实现,就很有意思。我写一下:

void bsort(int a[], int n)
{
  for (bool sorted = false; sorted = !sorted; --n)
    for (int i = 1; i < n; ++i)
    {
      if (a[i-1] > a[i])
      {
        swap(a[i-1], a[i]);
        sorted = false;
      }
    }
}

这段代码就很有意思,尽管道理上没有什么改变,不过它却削弱了冒泡的含义,相反,它的想法是,消除每一个逆序对,我之前的文章也写过什么是逆序对,就不说了。而代码停下的依据也是整个序列中不存在逆序对,这是标志着排序的sorted就是true了。
而外层for循环的判断结构上也很巧妙,我们知道继续循环的条件是满足条件,就是“条件为真”,所以当序列中有逆序对的时候,sorted == false,而进入循环后,因为sorted = !sorted,sorted就被设为了true,只有排列中不存在逆序时,sorted才会保留true,进而在外层判断时被赋值为false,不满足条件,结束循环。
本文没有什么特殊含义,就是看到了一个不错的实现,想分享一下。

相关文章

  • 1.6冒泡——一点新的感悟

    其实我是没打算写这个算法的,你也看出来了,不是吗。不过我今天看到了一个实现,觉得很有意思,不妨讨论一下。冒泡排序的...

  • 一张图读懂 Kubernetes 1.6

    Kubernetes 1.6 发布了! 为了让大家更直观的了解 Kubernetes 1.6 版本中的新功能、新特...

  • 一点新的感悟

    在上周日,也就是3月26日,写的那篇文章《屡屡被骗的老人》里写了一个观点: 人,首先要解决的是“生存”的问题,其次...

  • Istio1.6新特性:Workload Entries

    今天给大家带来Istio1.6的新特性介绍,翻译自Introducing Workload Entries。 新功...

  • 奇怪,什么鬼

    第一次萌新冒泡。

  • 公交狂想曲

    新有路,到了,请下车的乘客携带好随身物品准备下车~ 滴~1.6元~滴~1.6元 车里异常安静,除了公交车上广播声,...

  • JDK新特性书目录

    JDK1.4新特性 JDK1.5新特性 JDK1.6新特性 JDK1.7新特性 JDK1.8新特性

  • 90后的两个极端

    今天第七天。对于突然间冒出的每日更新一点新的思想,写一点感悟文章的想法,可能要终止了,再也没有新的想法、新的内容来...

  • 新年快乐

    新的一年,新的开始。 许个愿! 想我了吗? 我想你了,想的冒泡泡。

  • 尺寸

    客厅 6.9*3.4 +1.6*1.5 =25.86 过道 1.6*1.3 + 1.1*1.6 =3.84 阳台 ...

网友评论

      本文标题:1.6冒泡——一点新的感悟

      本文链接:https://www.haomeiwen.com/subject/idbisxtx.html