冒泡排序

注意点

  • 越界问题:i的边界是n-1,也就是说是对总共的第1~n个数进行排列(最后一个数处于被比较状态,不需要额外主动比较);j的初始值或最终值与当前i的值

    有关题目中往往会改变i的值来考察,拿j的值来填空
  • 升降序问题:取决于j循环if比较
  • 循环次数:n-1 两两比较次数:n(n-1)/2

初级代码

For i=1 to n-1
     For  j= n to i+1  step -1
            If d(j)<d(j-1)  then
                 t=d(j): d(j)=d(j-1):d(j-1)=t
            End If
     Next j
Next i

变式

  • 遍数优化

原理:先立一个flag,如果当前这遍循环中有进行过交换,则改变flag的值;如果一直没有进行交换,即数列已有序,则退出循环

For i=1 to n-1
     flag=true 'new
     For  j= n to i+1  step -1
            If d(j)<d(j-1)  then
                 t=d(j): d(j)=d(j-1):d(j-1)=t
                 flag=false 'new
            End If
     Next j
     if flag=true then Exit For 'new
Next i
  • 范围优化

原理:基于遍数优化版本上的再次优化(遍数优化当然可以修改成do while形式的)。last用于锁定最近且最后一次修改的地方,flag效果同遍数优化。下一次循环只需要遍历last~n之间的数字即可。

Do while flag=true 'new
     last=1:flag=true 'new
     For  j= n to last+1  step -1
            If d(j)<d(j-1)  then
                 t=d(j): d(j)=d(j-1):d(j-1)=t
                 m=j 'new
                 flag=false 'new
            End If
     Next j
     last=m'new
Loop
  • 双向排序

原理:说白了就是一个升序一个降序的俩普通冒泡并在一起,但是一个从头一个从尾开始遍历。由于内部的for是并列的,所以粗略地看,时间复杂度并没有变化,但却将比较遍数缩小成其1/2。个人觉得只适用于n为偶数的情况,

因为如果像下面的代码一样,中间必有一个孤儿没有排到。(visual basic中的/是向上取整,\是向下取整)

For i=1 to n/2
     For  j= n-i+1 to i+1  step -1
            If d(j)<d(j-1)  then
                 t=d(j):d(j)=d(j-1):d(j-1)=t
            End If
     Next j
     For  j= i+1 to n-i  step -1
            If d(j)<d(j+1)  then
                 t=d(j):d(j)=d(j-1):d(j-1)=t
            End If
     Next j
Next i
  • 单层循环

下面这个是第一种单层循环冒泡,来自于老师的PPT,不大理解

Do While i <= n
    If i=0 or a(i-1)<=a(i) Then
        i=i+1
    Else i<>0 And a(i-1)>a(i)'感觉这个else简直废话
        t=a(i-1):a(i-1)=a(i):a(i)=t
        i=i-1
    End If
Loop

原理:若该趟for循环结束将给i赋值-1,并且将team的长度减1,继续下趟循环

下面这个思路来源于这条博客,将c++改成了visual basic

team=n-1
For i=0 To team
    If a(i)>a(i+1) Then
        t=a(i):a(i)=a(i+1):a(i+1)=t
    End If
    If i=team-1 Then
        i=-1:team=team-1
    End If
Next i

[Visual Basic]冒泡排序及优化的更多相关文章

  1. 特性(C# 和 Visual Basic)

    特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联. 特性与程序实体关联后,即可在运行时使用名为“反射”的技术查询特性. 有关更多信息,请参见 反射(C# 和 V ...

  2. 杂项-软件: VBA(Visual Basic for Applications)

    ylbtech-杂项-软件: VBA(Visual Basic for Applications) VBA (Visual Basic宏语言) Visual Basic for Application ...

  3. 使用 Async 和 Await 的异步编程(C# 和 Visual Basic)[msdn.microsoft.com]

    看到Microsoft官方一篇关于异步编程的文章,感觉挺好,不敢独享,分享给大家. 原文地址:https://msdn.microsoft.com/zh-cn/library/hh191443.asp ...

  4. Visual Basic 2012 借助DataGridView控件将SQL server2012 数据导入到Excel 2010

    摘  要: SQL Server 2012 数据和Excel 2010之间的连接和数据的传输,本篇文章主要针对的是SQL Server 2012 数据导入到Excel 2010文件中.Excel软件对 ...

  5. Visual Basic 2012 借助DataGridView控件将Excel 2010数据导入到SQL server 2012

    (注:注释的颜色原本为绿色,在这里变为黑色,有点不便,但不会造成阅读影响.放入Visual Basic2012代码编辑器后会还原成绿色.) 摘  要:DataGridView控件作为数据传输的中介,只 ...

  6. Delphi、C C++、Visual Basic数据类型的对照 转

    Delphi.C C++.Visual  Basic数据类型的对照 变量类型 Delphi C/C++ Visual Basic 位有符号整数 ShortInt char -- 位无符号整数 Byte ...

  7. 2016年4月TIOBE编程语言排行榜 Visual Basic正渐行渐远

    COBOL, BASIC 和 FORTRAN 很长一段时间作为主力开发语言被使用.有很多软件使用这些语言来编写,并且发展的不亦乐乎.然而经过多年的发展,COBOL和FORTRAN逐渐被抛弃, 而得益于 ...

  8. Visual Basic相关图书推荐

    Visual Basic从入门到精通(第2版) 作      者 国家863中部软件孵化器 编 出 版 社 人民邮电出版社 出版时间 2015-03-01 版      次 2 页      数 61 ...

  9. 演练:Office 编程(C# 和 Visual Basic)

    https://msdn.microsoft.com/zh-cn/library/ee342218(v=vs.110).aspx PIA的全称是 primary interop assembly  主 ...

随机推荐

  1. <USACO09FEB>庙会捷运Fair Shuttleの思路

    一个没有被我成功证明的 贪心 但是 ac了的 别人排序都是排终点.但我的排终点错了emm排起点才对qvq 有没有人友情看看怎么证(没有 #include<cstdio> #include& ...

  2. 将js进行到底:node学习6

    开始真正的node web开发--express框架 为何说现在才是web开发的真正开始呢? 首先任何企业都不会用原生的http协议API去开发一个完整的网站,除非她们先开发一个框架出来,其次我们之前 ...

  3. python os.path 模块常用方法

    代码: import os apath = os.path.abspath(__file__) # 绝对路径 dirname = os.path.dirname(apath) basename = o ...

  4. Android studio常用快捷键与设置

    1.格式化代码: 命令 快捷键 将代码合并成一行 Ctrl + Shift + J 格式化 Ctrl+Alt+L 2.API函数参数提示:双击选中所要提示的函数,再按F2即可显示函数的使用方法. 3. ...

  5. 深入理解Tomcat(12)拾遗

    前言 如何使用? 源码解读 总结 前言 Tomcat为了提高性能,在接受到socket传入的字节之后并不会马上进行编码转换,而是保持byte[]的方式,在用到的时候再进行转换.在tomcat的实现中, ...

  6. 一致性 Hash 算法分析

    当我们在做数据库分库分表或者是分布式缓存时,不可避免的都会遇到一个问题: 如何将数据均匀的分散到各个节点中,并且尽量的在加减节点时能使受影响的数据最少. Hash 取模 随机放置就不说了,会带来很多问 ...

  7. Angular总结

    angular关键核心点进行总结 1 2 angular中有很多知识点需要学习,学习成本是很大的,我通过平常开发中把一些 很重要知识点总结下来,不管是以后拿来用,或者跳槽面试需要,我都感觉是很有帮助的 ...

  8. 神州优车挂牌新三板!专车B2C对决C2C将愈发狂暴?

    近日,全国中小企业股份转让系统公告显示,神州优车已获准在新三板挂牌.神州优车作为神州专车的主营主体,此次挂牌新三板意味着神舟专车成功突围,成为"专车第一股".相比滴滴.Uber中国 ...

  9. Python爬虫-百度模拟登录(二)

    上一篇-Python爬虫-百度模拟登录(一) 接上一篇的继续 参数 codestring codestring jxG9506c1811b44e2fd0220153643013f7e6b1898075 ...

  10. tomcat服务器的应用总结

    tomcat的安装和部署: >> Web的基本入门: |-- C/S架构:客户端和服务器: |-- B/S架构:浏览器和服务器: >> 服务器当中可以放入的资源: |-- 静态 ...