[Visual Basic]冒泡排序及优化
冒泡排序
注意点
- 越界问题: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]冒泡排序及优化的更多相关文章
- 特性(C# 和 Visual Basic)
特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联. 特性与程序实体关联后,即可在运行时使用名为“反射”的技术查询特性. 有关更多信息,请参见 反射(C# 和 V ...
- 杂项-软件: VBA(Visual Basic for Applications)
ylbtech-杂项-软件: VBA(Visual Basic for Applications) VBA (Visual Basic宏语言) Visual Basic for Application ...
- 使用 Async 和 Await 的异步编程(C# 和 Visual Basic)[msdn.microsoft.com]
看到Microsoft官方一篇关于异步编程的文章,感觉挺好,不敢独享,分享给大家. 原文地址:https://msdn.microsoft.com/zh-cn/library/hh191443.asp ...
- Visual Basic 2012 借助DataGridView控件将SQL server2012 数据导入到Excel 2010
摘 要: SQL Server 2012 数据和Excel 2010之间的连接和数据的传输,本篇文章主要针对的是SQL Server 2012 数据导入到Excel 2010文件中.Excel软件对 ...
- Visual Basic 2012 借助DataGridView控件将Excel 2010数据导入到SQL server 2012
(注:注释的颜色原本为绿色,在这里变为黑色,有点不便,但不会造成阅读影响.放入Visual Basic2012代码编辑器后会还原成绿色.) 摘 要:DataGridView控件作为数据传输的中介,只 ...
- Delphi、C C++、Visual Basic数据类型的对照 转
Delphi.C C++.Visual Basic数据类型的对照 变量类型 Delphi C/C++ Visual Basic 位有符号整数 ShortInt char -- 位无符号整数 Byte ...
- 2016年4月TIOBE编程语言排行榜 Visual Basic正渐行渐远
COBOL, BASIC 和 FORTRAN 很长一段时间作为主力开发语言被使用.有很多软件使用这些语言来编写,并且发展的不亦乐乎.然而经过多年的发展,COBOL和FORTRAN逐渐被抛弃, 而得益于 ...
- Visual Basic相关图书推荐
Visual Basic从入门到精通(第2版) 作 者 国家863中部软件孵化器 编 出 版 社 人民邮电出版社 出版时间 2015-03-01 版 次 2 页 数 61 ...
- 演练:Office 编程(C# 和 Visual Basic)
https://msdn.microsoft.com/zh-cn/library/ee342218(v=vs.110).aspx PIA的全称是 primary interop assembly 主 ...
随机推荐
- Nginx笔记总结十九:nginx + fancy实现漂亮的索引目录
编译:./configure --prefix=/usr/local/nginx --add-module=../ngx-fancyindex-master 配置: location / { fanc ...
- 解决android 无法打开 DDMS 中的data目录
把上面操作一遍就可以了,如果还是不行你可以检查下 su 是不是输入错误了.
- php发送post请求的4种方式
http://blog.163.com/fan_xy_qingyuan/blog/static/188987748201411943815244/ class Request{ public stat ...
- Git忽略规则(.gitignore配置)不生效原因和解决
问题: .gitignore中已经标明忽略的文件目录下的文件,git push的时候还会出现在push的目录中,或者用git status查看状态,想要忽略的文件还是显示被追踪状态. 原因是因为在gi ...
- 快速入门和查询Python
评分: 4.5 作者: Ryan Lu 类别:Python 时间: 1. 注释 三种方式: 单行注释以 # 开头 多行注释用三个单引号 ''' 将注释括起来 多行注释用三个双引号 "&quo ...
- python通用读取vcf文件的类(可以直接复制粘贴使用)
前言 处理vcf文件的时候,需要多种切割,正则匹配,如果要自己写其实会比较麻烦,并且每次还得根据vcf文件格式或者需要读取的值不同要修改相应的代码.因此很多人会选择一些python的vcf的库,但 ...
- 创建SpringMVC项目过程
1.导入对应jar包 <properties> <spring.version>5.0.2.RELEASE</spring.version> </proper ...
- java集合-set
#java集合-set Map用于存储key-value的映射,其中key的值是不能重复的.并且还需要正确的覆写equals方法和hashCode方法 如果我们只需要存储不重复的key,并不需要存储对 ...
- 一起了解 .Net Foundation 项目 No.11
.Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. Microsoft Web ...
- 二进制原码、反码、补码以及Java中的<< 和 >> 和 >>> 详细分析
1.计算机二进制系统中最小单位bit 在计算机二进制系统中: bit (位) :数据存储的最小单元. 简记为b,也称为比特(bit),每个二进制数字0或1就是一个位(bit),其中,每 8bit = ...