- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
本文来介绍一下在vfp中实现起泡排序的问题,考虑到做成实例比较好理解,因此本文还是会以实例的方式来表达。本例在刚开始设计时,是采用这种方式来处理的:定义一个作用域为全局的、宽度为10的一维数组,利用表单上的文本框连续输入并接收10个数字,然后再对这10个数字进行从小到大的排序。不过运行了一下,觉得这种方式好麻烦,便改成了使用随机函数产生10个数字并对它们排序,所以本文也涉及到了一点vfp中的随机函数。
本例运行时如下图:
下面我们进入正题,首先看一下如何在vfp中产生随机数。有的学友以为vfp中无法产生随机数,其实vfp中有一个专门的Rand()函数来做这个事,关于这个函数可参考: HYPERLINK /mcc/mcc16/mcc16_rand.htm /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=1 to 10-i
if s(j)s(j+1)
t=s(j)
s(j)=s(j+1)
s(j+1)=t
endif
endfor
endfor
thisform.edit1.value=
for i=1 to 10
thisform.edit1.value=thisform.edit1.value+str(s(i),5)
endfor
您可能关注的文档
最近下载
- 中储粮油脂有限公司2025年下半年招聘笔试模拟试题及答案解析.docx VIP
- 长庆低渗透油藏描述难点、主要做法及典型案例.pptx VIP
- 安徽省2024_2025学年高二化学上学期第一次月考试题.doc VIP
- 2025北京房山区区直部门和乡镇(街道)全日制临聘人员招聘37人笔试备考试题及答案解析.docx VIP
- 学校建筑结构设计计算书.doc VIP
- 《应用文写作》高职完整全套教学课件.pdf
- 【施工】劳动力计划安排.docx VIP
- 2025北京房山区区直部门和乡镇(街道)全日制临聘人员招聘补充考试备考题库及答案解析.docx VIP
- 2025年河北保定市莲池区招聘社区工作者80人备考练习试题及答案解析.docx VIP
- 2022-2023年药物制剂期末复习-药物制剂设备与车间工艺设计(药物制剂)考试全真模考卷9(附答案.docx VIP
文档评论(0)