冒泡排序法就是每次将两个相邻的数进行比较,并将比较得到的大(小)数调换(或称“下沉”)到下面,直至有序(或把比较大的一个赋值给另一变量,再利用此变量跟未对比过的数字进行对比)。
设有一组数:(49,38,65,97,76,13,27,49,55)。
说明:第1趟,9个数找出一个最大数并下沉需要比较8次;第2趟,余下8个数找出一个次大数并下沉需要比较7次;第3趟……
n个数从小到大排序,需要n-1趟,每趟比较n-i次。
【例9.6】随机产生10个100以内的正整数,并将这10个数按从小到大的顺序输出。
图9-11 例9.6运行效果
随机产生10个10~100的整数,用“选择排序法”按值从小到大顺序排序,最后输出结果。
(1)利用Int(91*Rnd+10)产生值为10到100的随机整数。
(2)按值从小到大进行排序。排序方法:
将10个数放入数组a中,对下列下标变量进行排序处理:
a(1),a(2),a(3),…,a(8),a(9),a(10)
①从这10个下标变量中,选出最小值,通过交换把该值存入a(1)中。
②除a(1)之外(已存放最小值),从其余9个下标变量中选出最小值(即10个数中的次小值),通过交换把该值存入a(2)中。
③选出a(3)~a(10)中的最小值,通过交换,把该值存入a(3)中。
④重复上述处理,至a(8),可使a(1)~a(8)按小到大排列。
⑤第9次处理,选出a(9)及a(10)中的最小值,通过交换把该值存入a(9)中,此时a(10)存放的就是最大值。
完成上述比较及排序处理过程,可以采用两重循环结构,外循环的循环变量i从1到9,共循环九次;内循环的循环变量j从i+1到10。
本例采用默认的用户界面,所需数据由随机函数产生,处理后结果信息通过Print方法直接输出在窗体上。
图9-12 选择排序法结果
变量k记录每一次选出的最小值的下标,在本次比较结束后,使a(i)与a(k)一次换位即可。
【例9.7】采用顺序查找算法,从一批学号中查找指定学号,找到后显示学生的姓名。(www.daowen.com)
分析:顺序查找的方法就是从数组的第1个元素开始,根据查找的关键值与数组中的元素逐一比较,若相同,查找成功;若找不到,则查找失败。顺序查找法适合于被查找数据集无序的场合。
编写程序代码:在窗体的Load事件过程中,通过Array函数输入10名学生学号及姓名的原始数据,存放在数组xh()和xm()中。2个数组的数据对应存放,即xh(1)及xm(1)存放第1个学生的学号及姓名,xh(2)及xm(2)存放第2个学生的学号及姓名…依此类推。在窗体模块的声明段中声明了这两个数组变量名。
图9-13 “顺序查找算法”结果
代码如下:
【例9.8】采用折半查找算法,从一批学号中查找指定学号,找到后显示学生的成绩。
分析:折半查找法也称二分法查找法,是一种效率较高的查找方法。比顺序查找法快得多。
假设:要查找的数据个数为n=1000;顺序查找的平均次数为500,即1000/2;折半查找的最大次数为x=10,即2x=1000。在采用折半查找法之前,要求将数组按查找关键字(如本例的学号)排好序(从大到小或小到大)。
折半查找法的过程:先从数组中间开始比较,判别中间的那个元素是不是要找的数据,若是,则查找成功。否则,判断被查找的数据是在该数组的上半部还是下半部。如果是上半部,则再从上半部的中间继续查找,否则从下半部的中间继续查找。
通过Array函数输入10名学生学号及成绩的原始数据,存放在数组xh()和cj()中。2个数组的数据对应存放,即xh(1)及cj(1)存放第1个学生的学号及成绩,xh(2)及cj(2)存放第2个学生的学号及成绩……依此类推。在窗体模块的声明段中声明了这2个数组变量名。
数组xh()中的学号(查找的关键值)按值从小到大排好序,因此可以直接采用折半查找法。
图9-14 “折半查找算法”结果
程序代码如下:
【例9.9】根据公元年份获得以中国干支纪年的农历年份。提示:公元4年为“甲子”年。
分析:要获得与指定公历年对应的农历年份,首先要知道一下干支纪年法的特点。干支纪年法以“天干”和“地支”为基本元素,关节镜将两者以循环组合的方式形成农历年份。“天干”包含甲、乙、丙、丁、戊、已、庚、辛、壬、癸10个元素。“地支”包含子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥12个元素。干支纪年的组合序为:甲子、乙丑、丙寅、甲戌、乙亥、丙子……循环周期为60年,称为一个甲子。必须建立两个表示“天干”和“地支”的数组:
TianGan=array("甲","乙","丙","丁","戊","已","庚","辛","壬","癸")
DiZhi=array("子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)","巳(蛇)","午(马)","未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)")
界面设计:在Form1中添加Label1和Label2分别用作“公历”提示和显示农历结果;添加一个文本框Text1用于输入公历年份;添加一个命令按钮Command1用于计算与公历年对应的农历年份。
程序代码:
图9-15 例9.9运行效果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。