• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >数据结构 > VFP中产生随机数并实现起泡排序

VFP中产生随机数并实现起泡排序

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了vfp 随机数,vfp 随机函数,vfp缺少操作数,vfp水仙花数,vfp 表的记录数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

本文来介绍一下在vfp中实现起泡排序的问题,考虑到做成实例比较好理解,因此本文还是会以实例的方式来表达。本例在刚开始设计时,是采用这种方式来处理的:定义一个作用域为全局的、宽度为10的一维数组,利用表单上的文本框连续输入并接收10个数字,然后再对这10个数字进行从小到大的排序。不过运行了一下,觉得这种方式好麻烦,便改成了使用随机函数产生10个数字并对它们排序,所以本文也涉及到了一点vfp中的随机函数。

本例运行时如下图:

下面我们进入正题,首先看一下如何在vfp中产生随机数。有的学友以为vfp中无法产生随机数,其实vfp中有一个专门的Rand()函数来做这个事,关于这个函数可参考:http://bianceng.cn/mcc/mcc16/mcc16_rand.htm。需要注意的是,这个函数产生的是0到1之间的随机数,即产生的是小数。所以本例对这个函数产生的值进行乘100的操作,目的是将Rand()函数产生的随机数序列转变成整数使用。

再来看一下起泡排序。起泡排序的解决思路是依次对一列数中相邻的两个数进行比较,每次两两比较时将小的数放到前面,大的数放到后面。你可以把这列数想象为纵向排列的,每次比较时如同向池塘中扔进了一枚石子,轻的水泡浮到了水面,重的石子沉到水底。我们先来看一下这个问题的简单点的例子,分析一下对4个数用起泡法进行由小到大排序的过程,如下图:

起泡排序过程图

在上图中,有9、8、4、2三个数,首先第一次比较将前两个数9和8对调,第二次将第二及第三个数9和4对调,第三次将第三及第四个数9和2对调,进行了3次两两比较即结束了第一趟的比较,并得到了一个8、4、2、9的序列,此时这4个数中最大的数9已经“沉底”,在第二趟比较中对剩下的3个数(即8、4、2)进行两两比较即可;

在第二趟比较中,第一次对8和4进行比较并把大的放到下面,第二次对8和2进行比较并把大的放到下面。经过这两次比较后,第一趟比较把剩下的这3个数的大的数8也已经“沉底”。此时第二趟比较结束,并得到了一个4、2、8、9的序列,在第三趟比较中对剩下的2个数(即4、2)进行两两比较即可

在第三趟比较中,对剩余的两个数4和2进行比较、对调,第三趟比较结束,整个排序过程也结束,并得到了最终的排序结果序列:2、4、8、9。

这是对4个数用起泡法进行由小到大排序的过程,可以总结一下:4个数总共需要进行3趟比较,在第一趟比较中需要两两比较3次,第二趟比较中需要两两比较2次,而在第三趟比较中需要两两比较1次,即随着趟数的增加,趟中的比较次数是一个递减的关系,并且任意一趟的两两比较次数都是这个序列的数字个数与该趟的趟数的差。那么通过这个例子把这个问题一般化:假设进行排序的是n个数,则总共需要进行n-1趟比较,在第1趟比较中需要进行n-1次两两比较,在第j趟比较中需要进行n-j次两两比较。

关于为什么n个数需要n-1趟比较,可以举这样一个简单例子:假设有10个人围成一圈,如果要其中的一个人依次和其它的朋友握一下手,那么他需要握几次手呢?很明显是9次,因为他要把自己排除在外的。同理,如果是n个人就需要握n-1次手了。

下面我们进入实例制作过程:

一、新建表单,并向表单上添加一个编辑框控件Edit1及3个命令按钮command1~command3.

二、将3个命令按钮command1~command3的caption属性依次设置为:“生成10个随机整数”、“清屏”和“起泡排序”。

三、添加事件代码:

1、命令按钮command1(“生成10个随机整数”)的click事件:

public s(10)
for i=1 to 10
  s(i)=int(rand()*100) &&产生两位数的随机整数
  thisform.edit1.value=thisform.edit1.value+str(s(i),5)
endfor

2、命令按钮command2(“清屏”)的click事件:thisform.edit1.value=""

3、命令按钮command3的click事件:

for i=1 to 9
  for j=i+1 to 10
    if s(i)>s(j)
    t=s(i) &&t是中间变量,用于交换两个变量的值
    s(i)=s(j)
    s(j)=t
    endif 
  endfor
endfor
thisform.edit1.value=""
for i=1 to 10
    thisform.edit1.value=thisform.edit1.value+str(s(i),5)
endfor
 

四、ok了,运行表单吧。

</div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • VFP中产生随机数并实现起泡排序

相关文章

  • 2017-06-28迭代算法与递归算法的概念及区别
  • 2017-06-28VFP中产生随机数并实现起泡排序
  • 2017-08-17做幻方
  • 2017-06-28N皇后问题摆法算法描述
  • 2017-06-28数据结构教程 第二十四课 遍历二叉树
  • 2017-06-28数据结构教程 第三十一课 动态查找表
  • 2017-06-28数据结构教程 第三十课 静态查找表(二)有序表的查找
  • 2017-08-17面向对象编程(OOP)理解
  • 2017-06-28J2ME中的基础碰撞检测算法浅析
  • 2018-08-06倒叙打印链表

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 复杂链表复制
    • 链表的建立、插入和删除
    • PB动态创建菜单的核心算法描述
    • java排序算法
    • 数据结构C语言实现之线性表
    • 数据结构教程 第二十九课 静态查找表(一)顺序表的查找
    • 【一步步学OpenGL26】-《法线贴图》
    • 数据结构教程 第三十六课 选择排序、归并排序
    • 数据结构教程 第十二课 实验二 循环链表实验
    • 数据结构实验之栈三:后缀式求值

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有