请教一个VB程序~
Option Base 1Dim a, nPrivate Sub Command1_Click() '选择排序法n = Val(InputBox("输入要排序的数量"))ReDim a(n)RandomizeFor i = 1 To na(i) = Int(10 + 90 * Rnd)'数据给定的话把a数组换成给的数据就行了NextFor i = 1 To n - 1For j = i + 1 To nIf a(j) < a(i) Then t = a(i): a(i) = a(j): a(j) = tNext jNext iFor i = 1 To nPrint a(i);NextPrintEnd Sub 赞同
答案:……你是请教里面的思路和意思吧…
首先,这段代码不像你所说的用选择排序法,而是用了冒泡排序法,不过都是为了让一个无序的数据序列按照递增或递减来重新排序
不过这段代码的冒泡排序貌似用错了,你可能以为每次外循环for执行一次后就将没排列好的最大的数据对调到了最上端,这是对的 ,但你忽略了外循环一次后过滤的第一个数据不一定是最小,所以排序后的结果往往不是有序的,所以应把最大的数据过滤掉(总之有很多种形式,下面的这种形式挺麻烦的,但为了让你彻底理解),循环改为:for i = 1 to n - 1 '或for i = n-1 to 1 step -1也行,反正没调用到i,只要循环次数一样就ok了
for j = 2 to n
if a(j-1) > a(j) then
t = a(j) : a(j) = a(j - 1): a(j - 1) = t
next j
next i
当然也可以简便的按你的方法把for i =1 to n-1改为
i = 1
for n = n - 1 to i step -1
还是把最大数据给过滤调…
不过在碰巧的情况下你的方法也能排列成一个有序序列,其机率大概是(2^n-2)/(n!/2) [这个!是指数学中的阶乘]
建议你最好在排列的元素较少时用冒泡,建议你最好在排列的元素较长时而不是很乱时用插入,建议你最好在排列的元素又长又乱时用选择
还有其它的,option base 1的意思是以下的所有声明的数组的下标都为1, 随机数生成10-100(不包括100)间的元素, 排好后的数据被一个个的输出在窗口中,最后还输出了个空行………
希望以上回答能满足你的需要…
上一个:讲解VB画圆
下一个:VB常用语言