APP下载

一个非常简单的排序程序

2011-11-14华晶

中国科技信息 2011年24期
关键词:大数数组吉林

华晶

北华大学基础医学院生物医学工程教研室,吉林 吉林 132013

一个非常简单的排序程序

华晶

北华大学基础医学院生物医学工程教研室,吉林 吉林 132013

介绍一非常简单的排序应用程序。

排序;排序程序;VB程序

把n个任意排列的一组数排序,转变为从小到大或从大到小排列,这在数据处理中(如统计学处理中的求区分度等)很有用。实际中,有人曾提出过或简单些或复杂些的排序程序。

笔者提出一个非常简单的排序程序。

排序思想:比如,把n个任意排列的一组数转变从大到小排列。先从排列中选出最大的数,作为排列的第一个数;然后再从余下的数中选出最大的数(次最大),作为排列的第二个大数(次最大);……,如此进行下去,直到结束,则获取从大到小的排列。

做法如下:以VB代码排序程序为例。

1.赋值给定义的数组t(n),如把任意排列的六个数4,5,2,3,1,7赋数组t (n)后,可得t(1)=4,t(2)=5, t(3)=2, t(4) =3, t(5) =1,t(6)=7;

2.选一个比数组中的数都小的数,用变量代码tx表示之,如令tx=-100;3.编下列二重循环作排序主程序,

选大数总的做法是:第一重循环 i的数值,对应各次排列首位数的位置,伴随i=1到6的变化,在第二重循环中,在j=i到6循环中,选出各个最大数tx= t(j),依次标记为t(i) = tx(i=1,2,3,4,5,6)。在j=i到6的循环中,每当选出大于相应首位数的大数,则把该大数tx = t(j)与此时排在数组相应首位的数t(i)互换位置,其它数位置不动。

分析上述主程序排序过程:以对数组4,5,2,3,1,7作从大到小排列为例。

第一重循环 i=1时,排在首位的数是t(i) = t(j)= t(1) = 4。若各条件t(j) > tx成立,则由第二重循环选出最大数tx =t(j) = t(6) =7,记为t(i) = t(1) = 7。

选出最大数t(i) =t(1)=7的过程如下:

当第二重循环首次排序j=i=1时,有t (j)=t(1)=4(此时首位数是4),然后用条件语句

作判断, 条件 t(j) > tx 成立,即 t(j) =t(1)=4 > tx = -100 成立,则执行tx = t(j)、t(j) = t(i) 及 t(i) = tx,于是由tx = t(j)得到从tx=-100 转换为tx= t(j)= t (1)=4,tx=4为初次选出的大数。之后执行位置互换 t(j) = t(i) 及t(i) = tx,即由t(j) = t(i)知, t(j) = t(1)=4 与t(i) = t(1) =4互换位置。但因此时t(j) = t(1)与t(i) = t(1)数值相同(均为4),属同一位置的数,可见该次排序中,数组中原先各数位置没变,仍为4,5,2,3,1,7(请记住此时tx=4);

每次第二重循环开始进行首次排序(j=i)时,数组均维持前边的排列不变。

当第二重循环中的j=2时,有t(j)=t(2) =5,条件t(j) > tx成立,即t(j) = t(2) =5> tx=4成立,于是选出大数tx= t(j)=t (2)=5。之后执行位置互换t(j) = t(i) 及 t (i) = tx,由t(j) = t(i) 知,t(j) = t(2)=5被前次t(i) = t(1) =4替换,变为t(j) = t (2) =4,于是前次排列数组中第二个数5被换为原排在首位的数4。由后一转换t(i) = tx知,选出的大数t(i) = t(1)= tx=5被换到首位,形成排列中第二个数5与原首数4的位置互换,其它数的原位置不变,于是原排列4,5,2,3,1,7变为5,4,2,3,1,7(请记住此时tx=5);

可见,满足条件t(j) > tx则作位置互换,选出的大数被换到此刻数组首位。

当第二重循环j=3,4,5时,有t(j)= t (3)=2,t(j)= t(4)=3、t(j)= t(5)=1条件t(j) > tx=5不成立,故不执行t(j) = t(i) 及t (i) = tx位置互换,数组仍为前次排列5,4,2,3,1,7;

可见,不满足条件t(j) > tx时,各数排列位置不变,维持前一次排列。

当第二重循环j=6时,有t(j)= t(6)=7,条件t(j) > tx成立,即t(j)= t(6)=7> tx=5成立,

于是执行tx= t(j)、t(j) = t(i) 及 t(i) = tx。由tx= t(j)选出大数tx= t(j)= t(6) =7。作位置互换t(j) = t(i) 及 t(i) = tx,有t(j)= t(6)=7被换到前次排列t(i) = t(1) = tx=5的位置(首位),而前次排在首位的数5被换到t(j)= t(6)的位置,排列5,4,2,3,1,7变为7,4,2,3,1,5。

至此,第一重循环第一步(i=1)结束,选出最大数7,并用此时t(i) = t(1) = tx=7标记。

第一重循环进行第二步,即 i=2时,重定tx=-100,并仍由第二重循环选出数组中的大数,即选出原数组中的第二最大数tx =5,并记为t(i) = t(2)= 5。

因此时第二重循环由j=i=2,取到j=6,故第二大数是去掉前次排在首位的大数7以后的数组中选,即在4,2,3,1,5中选,故此数组的首数是4。

第二大数5选出过程如下:

当第二重循环j=2时,条件t(j) = t(2) =4 > tx=-100成立,执行tx=t(j)、 t(j) = t(i)及t(i) = tx。此时选出大数tx=4,类似上述i=1时的分析,故排列4,2,3,1,5没变,总排列仍是7,4,2,3,1,5。其实,这是第二重循环第二次作首次排列,故排列应维持前次排列不变。

当j=3,4,5时,分别有t(j)= t(3) =2,t(j)= t(4) =3,t(j)= t(5) =1,条件t(j) > tx=4不成立,排列不变(请记住此时仍是tx=4)。

当j=6时,有t(j)= t(6)=5,条件t(j) = t(6)=5> tx=4成立,选出大数tx= t(j) = t(6)=5。之后作位置互换,由t(j) = t(i)知,t(j)= t(6)= 5被换为前次t(i) = t(2)= tx=4,即换为t(j)= t(6)= 4,由t(i) = tx知,t(i) = t(2)= tx =5(此次tx = 5),于是有5与排在首数4互换位置,排列由4,2,3,1,5变为5,2,3,1,4,总排列由7,4,2,3,1,5变为7,5,2,3,1,4。

至此,第一重循环第二步(i=2)结束,选出次大数5,并用此时t(i) = t(2) = tx=5标记。

如此进行下去,每当满足条件t(j) > tx时,就有位置互换,把各次选出的最大数换到前边相应的各个次最大数的位置,直到取完i=1到6及j=i到6,完成两重循环,获取从大到小的排列7,5,4,3,2,1。

源程序如下:

For i=1 To 6: Print t(i) , : Next i ‘显示从大到小排列后的数组

运行程序结果:显示出原排列为:4,5,2,3,1,7

从大到小排序为:7,5,4,3,2,1

由上述知,选最大数tx = t(j)及排序动作t(j) = t(i) 及 t(i) = tx只有满足条件t(j) > tx时才发生,且只有互换位置动作,因此,程序运行过程的步骤少。

此排序程序比某些排序程序(有很多)运行步骤少得多、简单得多。

改变程序中条件语句的大于号为小于号,并令tx=100, 可得从小到大排序。

[1]刘娜,郑楠楠.插入类排序算法的改进及实际应用.沈阳大学学报2008;2:14~18

[2]吴奇英.计算机程序设计中的排序方法.交通科技与经济2007;4:74~76

[3]姜晓铭主编.Visual Basic 6.0中文版编程指南.第1版:中国石化出版社2006;5

10.3969/j.issn.1001-8972.2011.24.047

华晶,工程硕士,实验师。

猜你喜欢

大数数组吉林
JAVA稀疏矩阵算法
A Spring Coat for Sarah
“大数的认识”的诊断病历
JAVA玩转数学之二维数组排序
吉林卷
吉林卷
超级英雄教你大数的认识
更高效用好 Excel的数组公式
不同分布AANA序列加权和的一个弱大数定律
寻找勾股数组的历程