从VB来看-InsertionSort(VB插入排序)
插入排序(Insertion Sort)
它是通过不断将未排序数据插入有序序列,一次次循环加入待排序数据扩充有序序列部分,来达到最终的排序目的。很像我们平时发牌时一张张整牌的过程:我的习惯是先把最左边第一张作为有序部分,之后每拿取一张牌进行大小比较,按照升序或降序的方式整理好手里的牌(构建整个有序部分)。 在众多算法的使用对比中,通常在量级小于千的情况下使用插入排序还是令人满意的。
时间复杂度:
若一趟扫描即可完成排序。所需的关键字比较次数 和记录移动次数 均达到最小值时 ,有最好时间复杂度为:O(n)。反之,最坏时间复杂度为;O(n^2)。
排序的稳定性
在插入排序的整个过程中,不断插入待排序数据扩充有序部分,不会改变相同数据的相对位置,所以 是一种 稳定的排序算法。若需要更多讲解举例解释可以看看这个内容 :从VB来看-排序
来看看下面的例子,再次了解一下插入的过程。
视频来自网络-Métodos de Ordenação
从VB来看-插入排序
这是VB-插入排序(互换式)
通过对上图排序过程的了解可以有下面的VB代码。
做了思路的注释,若有什么疑问可以留言。
Sub Insertion(MyArray(), ByVal nOrder As Integer)
Dim NextElement '定义将要插入的数据在数组中的位置
Dim Index '定义将要比较的数据在数组中的位置
Dim TEMP '定义在执行数据交换时的临时变量'将数组第一位做为有序部分,那将要插入的数据可以位于数组第二位
NextElement = LBound(MyArray) + 1 '记录要插入的数据的位置 While (NextElement <= UBound(MyArray)) '判断是否还有待插入数据Index = NextElement '记录将进行比较的数据位置DoIf Index > LBound(MyArray) Then '判断比较的数据位置是否到数列尽头If nOrder = ASCENDING_ORDER Then '判断是否选择升序排列If MyArray(Index) < MyArray(Index - 1) Then '判断插入数据是否小于有序部分TEMP = MyArray(Index) '数据交换MyArray(Index) = MyArray(Index - 1)MyArray(Index - 1) = TEMPIndex = Index - 1 '移动比较位置ElseExit Do '退出循环-完成一次插入数据 End IfElseIf nOrder = DESCENDING_ORDER Then '判断是否选择降序排列If MyArray(Index) >= MyArray(Index - 1) Then '判断插入数据是否小于有序部分TEMP = MyArray(Index) '数据交换MyArray(Index) = MyArray(Index - 1)MyArray(Index - 1) = TEMPIndex = Index - 1 '移动比较位置ElseExit DoEnd IfEnd IfElseExit Do '退出循环-完成一次插入数据 End IfgIterations = gIterations + 1 '记录循环次数LoopNextElement = NextElement + 1 '移动到下一位插入数据gIterations = gIterations + 1 '记录循环次数Wend
有了上图生动的过程,再来看一个例子,想想有什么不同
图片来自维基百科
这是VB-插入排序(平移式)
通过对上图排序过程的参考可以有下面的VB代码。
Sub Insertion(MyArray(), ByVal nOrder As Integer)
Dim NextElement '定义将要插入的数据在数组中的位置
Dim Index '定义将要比较的数据在数组中的位置
Dim TEMP '定义在执行数据交换时的临时变量'将数组第一位做为有序部分,那将要插入的数据可以位于数组第二位
NextElement = LBound(MyArray) + 1 '记录要插入的数据的位置 While NextElement <= UBound(MyArray) '判断是否还有待插入数据TEMP = MyArray(NextElement) '刷新要插入的数据的位置Index = NextElement - 1 '记录将进行比较的数据位置DoIf Index >=LBound(MyArray) Then '判断比较的数据位置是否到数列尽头If nOrder = ASCENDING_ORDER Then '判断是否选择升序排列If TEMP < MyArray(Index) Then '判断插入数据是否小于有序部分MyArray(Index + 1) = MyArray(Index) '有序部分为插入数据移出空位Index = Index - 1 '移动到更小的有序数据位置Else: Exit Do '退出循环-(已找到插入数据位置合理位置)End IfElseIf nOrder = DESCENDING_ORDER Then '判断是否选择降序排列If TEMP > MyArray(Index) Then '判断插入数据是否大于有序部分MyArray(Index + 1) = MyArray(Index) '有序部分为插入数据移出空位Index = Index - 1 '移动到更大的有序数据位置Else: Exit Do '退出循环-(已找到插入数据位置合理位置)End IfEnd IfElse: Exit Do '退出循环-(已找到插入数据位置合理位置) End IfLoopMyArray(Index + 1) = TEMP '插入数据NextElement = NextElement + 1 '移动到下一位待插入数据位置gIterations = gIterations + 1 '记录循环次数Wend
从VB来看-InsertionSort(VB插入排序)相关推荐
- VB→C++→C#→VB.NET,语言的共性和个性
从当初的误打误撞学习VB之后就一发不可收拾,直到现在接触VB.NET,想想自己也经历了VB→C++→C#→VB.NET这四种计算机语言,在此并不是想说自己学语言的多少,因为语言并不在于多而在于精,很惭 ...
- VB.net:VB.net编程语言学习之添加引用打包安装项目的简介、案例应用之详细攻略
VB.net:VB.net编程语言学习之添加引用&打包安装项目的简介.案例应用之详细攻略 目录 关于添加引用 1.SW的二次开发,需要引用多个Solidworks库文件即dll文件
- VB.net:VB.net编程语言学习之操作符(变量/常量/数据类型/声明)逻辑控制语句(条件判断/循环语句)的简介、案例应用之详细攻略
VB.net:VB.net编程语言学习之操作符(变量/常量/数据类型/声明)&逻辑控制语句(条件判断/循环语句)的简介.案例应用之详细攻略 目录 VB.net编程语言学习之操作符/变量/常量/ ...
- 不同编程语言代码转换网站,在线编程语言代码转换,C#转VB.NET,VB.NET转C#
不同编程语言代码转换网站,在线编程语言代码转换 C#转VB.NET,VB.NET转C# 推荐一个国外不错的编程代码转换网站 http://www.developerfusion.com/tools/c ...
- 运行中调试初计算机的命令,计算机二级 VB辅导:VB中程序的运行调试
1.运行程序 运行程序,可用下列方法之一: (1)选择主窗口的"运行"菜单的"启动"命令. (2)按快捷键F5. (3)选择工具栏上的启动按钮. 在程序运行过程 ...
- 计算机vb实验感想,VB学习心得体会
VB学习心得体会 VB学习心得体会 VB是一门程序设计语言,也需要一定的英语基础.VB既能充实我们的生活,武装我们的头脑,锻炼我们的意志,又能在以后需要的时候成为帮助我们成功的推进动力.对于VB的学习 ...
- VB.net:VB.net编程语言学习之基于VS软件利用VB.net语言实现对SolidWorks进行二次开发的简介、案例应用之详细攻略
VB.net:VB.net编程语言学习之基于VS软件利用VB.net语言实现对SolidWorks进行二次开发的简介.案例应用之详细攻略 目录 调用SolidWorks功能简介 1.宏录制步骤 (1) ...
- 计算机vb实验报告,VB综合实验报告格式
<VB综合实验报告格式>由会员分享,可在线阅读,更多相关<VB综合实验报告格式(5页珍藏版)>请在人人文库网上搜索. 1.华北科技学院计算机系综合性实验实 验 报 告 课程名称 ...
- 大学python和vb哪个简单-vb和python哪个速度快
Python好学,易上手.如果你是第一次学习计算机编程语言,推荐你学这个.更重要的是,学会这门语言,也能方便你对电脑中的文档进行处理.VB,面对大多数任务,编码速度都不及Python的. VB能快速的 ...
最新文章
- 如何加快Json 序列化?有哪些方法?
- Android Studio如何减小APK体积
- 主流微服务注册中心浅析和对比
- Android 使用AsyncTask 后监听异步加载完毕的动作
- Atitit attilax提出的软件开发发展趋势与概念 1. 长期化 复用化 跨平台 可移植性	1 2. 通用化 通用 化的渠道至少有3种	1 2.1. 模块化	1 2.2. 标准化接口	1 2
- pygame安装时出现的问题以及解决方案记录.
- 【树莓派】USB摄像头+python+opencv
- 22条创业军规,让你5分钟读完《创业维艰》
- 计算几何与计算机图形必备书单整理
- 【原创】小时候特别喜欢玩的强手棋游戏
- jenkins定时构建
- linux服务器默认多久断开ssh,SSH超时自动断开问题解决
- 实现74LVC161的计数器功能
- php判断0点到7点凌晨时间段的方法
- 《FFmpeg从入门到精通》读书笔记(五)
- 精华【分布式微服务云架构dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!
- Windows和Linux简单命令的总结
- 计算最大公约数(GCD)
- linux 自动mv脚本,linux replace rm to mv(脚本)
- 小程序|炎炎夏日、清爽一夏、头像大换装