从上次的算法课到现在为止,我才把插入排序的算法在VB上实现出来,其中有一个原因就是同样的逻辑代码,在C语言中就是不报错,在VB中就是总报错,而且还是下标越界的错误,这就让我很是奇怪,之后把C语言的代码改动了之后才明白了其中的区别和用法所在,所以今天才弄完有关VB 的插入排序算法,借此来和大家分享一下。

一、C语言中的排序算法

算法源码如下:

void insort(int number[]) {int i, j, k, tmp;     //声明变量for(j = 1; j < MAX;j++){tmp = number[j];     //当前待插入的数值i = j - 1;while(i>-1 && tmp < number[i]) {     //选择插入位,number[i+1] = number[i];       //不满足的数字左移动一个数组空间i--;        }number[i+1] = tmp;         //把待排序的数插入数组相应位置中}
}

看起来很是简单,执行也是可以执行的,可是到了VB中这么写就会出错:

For j = 1 To nt = a(j)      '<span style="font-family: Arial, Helvetica, sans-serif;">当前待插入的数值</span>
k = j - 1DoEventsWhile (k>-1 and t <= a(k))                a(k + 1) = a(k)         '不满足的数字左移动一个数组空间   k = k - 1DoEventsWenda(k + 1) = t             '把待排序的数插入数组相应位置中
Next j

报错了:

二、问题的解决与修正

首先看调试器中的变量值,k=-1,在数组中确实没有-1这个索引的值,所以导致了数组的报错。

于是为了避免这个错误,查了好多的方法,最后把程序改成了这样:

    For j = 1 To nt = a(j)k = j - 1DoEventsDo While (t <= a(k))a(k + 1) = a(k)k = k - 1If k = -1 ThenExit DoEnd IfDoEventsLoopWenda(k + 1) = tNext j

这样就可以避免错误了,但是这是为什么呢,为什么在C语言中就不会报这样的错误呢?

三、错误分析

造成这种错误的原因主要是因为不同语言的解释器在编译这两种语言的代码的时候在解释逻辑判断的时候方法是不同的。上述代码用到了逻辑与操作,也就是VB 中的and运算符和C语言中的&&运算符。

我们都知道,与运算只要有一个条件是False,那么最后运算结果就是False,C语言在执行这个运算的时候,判断第一个条件,发现是False,之后就不会再判断第二个条件了,但是在VB中他是两个条件都考虑的,所以才会出现这个错误,导致了逻辑一样的代码,换了一种语言却不能正确执行了,这一点很是重要。

四、DoEvents小发现

不知道大家用VB写过排序的计时程序了没有,不知道大家是否出现了这样的问题,就是一点开始排序的瞬间,整个VB的程序就死去了,而且自己的写的计时程序好像到了最后才会显示结果,不能实时的显示,这个时候DoEvents这个命令就会帮我们大忙了,在循环中用DoEvents之后,程序执行的时候会释放CPU来处理其他的事情,对于软件体验有很大的用处,但是对于排序来说会增加排序的时间,这里需要考虑使用的地方和频率。

从VB与C语言的插入算法代码的不同看逻辑运算的差别相关推荐

  1. c语言数据结构插入算法说明,C语言数据结构插入算法

    C语言数据结构插入算法 C语言数据结构插入算法 C语言数据结构 数据结构学习 ->是二目运算符 p->a 引用了指针p指向的结构体的成员a. 整合 void unionL(List *La ...

  2. c语言 k最近邻分类算法代码,实验二 K-近邻算法及应用

    实验二 K-近邻算法级应用 一.实验目的 1.理解K-近邻算法原理,能实现算法K近邻算法: 2.掌握常见的距离度量方法: 3.掌握K近邻树实现算法: 4.针对特定应用场景及数据,能应用K近邻解决实际问 ...

  3. 蚁群算法求函数最值c语言,蚁群算法代码(求函数最值)

    蚁群算法简单应用 function [F]=F(x1,x2) %目标函数 F=-(x1.^2+2*x2.^2-0.3*cos(3*pi*x1)-0.4*cos(4*pi*x2)+0.7); End f ...

  4. c语言围棋ai算法代码,晒晒围棋代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 for(;first!=last;++first) { int x = first->first, y = first->second; bo ...

  5. python写界面c这算法_插入算法分别从C,java,python三种语言进行书写

    真正学懂计算机的人(不只是"编程匠")都对数学有相当的造诣,既能用科学家的严谨思维来求证,也能用工程师的务实手段来解决问题--而这种思维和手段的最佳演绎就是"算法&quo ...

  6. 二叉树c语言程序插入某个成员,关于C ++:二叉树:插入节点算法

    我正在尝试实现二叉树(如果它是普通的二叉树或二叉搜索树,则不重要),并且我在创建节点并将其链接到树的功能上遇到了一些麻烦. 这是我到目前为止编写的代码: class BinaryTree { clas ...

  7. C语言八大排序算法,附动图和详细代码解释!

    文章来源:电子工程专辑.C语言与程序设计.竹雨听闲 一.前言 如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二. ...

  8. 硬核!C语言八大排序算法,附动图和详细代码解释!

    来源 :C语言与程序设计.竹雨听闲等 一 前言 如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二 八大排序算法 ...

  9. 序列划分c语言,一篇“get”C语言八大排序算法

    如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的. 二.八大排序算法 排序算法作为数据结构的重要部分,系统地学习一下是 ...

最新文章

  1. Swift之父退出核心团队,自曝原因:环境有毒!
  2. centos 6.5 安装openssl
  3. 连接远程电脑中的虚拟机---端口映射
  4. 为JavaOne 2014做好准备!
  5. 深度解析LSTM神经网络的设计原理
  6. PHPCMS V9 按浏览次数排行调用文章
  7. mercurial和svn_DBA Mercurial简介–分支和合并
  8. 蚂蚁金服服务器系统,蚂蚁金服轻量级监控分析系统 SOFALookout 服务端开源
  9. 3dmax学习6——扫描命令
  10. c++坦克大战小游戏
  11. 计算机一直黑屏,win7系统显示器黑屏但电脑一直在运行如何解决
  12. 为什么很多公司不要培训机构出来的程序员?
  13. 力扣(141.21)补9.1
  14. 优化问题---梯度、方向导数、法线
  15. php学习报告_论坛PHP报告
  16. 我不能注销,重新启动,关闭我的windows XP机器?
  17. 战地1 服务器 网页,战地1服务器设置教程
  18. 香橙派OrangePi 4 LTS开发板通过Mini PCIE连接SATA硬盘的操作方法
  19. Unity 之大屏幕多点触控插件 TouchScript 9.0 入门指南(上)
  20. pyqtgraph捕获事件

热门文章

  1. Vue自定义组件与Vue组件组件传值
  2. 河南省第六届大学生程序设计竞赛——外星人的供给站
  3. 高端运动耳机哪个品牌最好用、最新款运动耳机推荐
  4. 实景三维浪潮翻涌,新技术“席卷”石家庄!
  5. 如何判断程序化交易模型优劣
  6. css + HTML 实现京东app左右拖动导航栏
  7. Go1.18 新特性:引入新的 netip 网络库
  8. word自动编号跳号
  9. MySQL(08)——MySQL事务管理
  10. 社会化网络架构的三要素