返回列表 发帖

[问题求助] 请问VBS如何用插入排序法给动态数组排序?

我自己写了个代码,要么只显示一个值,要么什么都不显示,我知道这代码逻辑不对,但是我真的尽力了才来问别人,百度知道没人理,VBS吧歧视新人,思必达要钱,果壳虽然有一个人来但是一个人需要花N多天。声明常量:我不是伸手党,代码如下。
Option Explicit
Dim Arr()
Dim A,B,C
Dim j

B=InputBox("Now,Please writing B")'元素数

For A=0 To B'输入元素值
ReDim Arr(A)
Arr(A)= InputBox("Now,Please writing A as well")
Arr(A)= Int(Arr(A))
If IsNumeric(Arr(A))=True then'处理意外
Else
WScript.Quit  
End If
Next

B1'调用

For j=0 To B'结果
C=C&" "&Arr(B)
Next
WScript.Echo C
Function B1
Dim i,n,t

For i = 0 To B-1'排序
For n = i To B
If Arr(i) < Arr(n) Then
t = Arr(i)
Arr(i) = Arr(n)
Arr(n) = t
End If
Next
Next
End Function

本帖最后由 ivor 于 2016-2-21 22:12 编辑
For A=0 To B'输入元素值
ReDim Arr(A)COPY
ReDim Arr(A)去掉,你犯了低级错误,Arr变成局部变量了

第二行要声明数组的大小
Dim Arr(5)COPY
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

本帖最后由 ivor 于 2016-2-22 18:47 编辑

回复 1# 793150834

差点没把我看吐了,错误的太多,我修改了一下,我VB不熟悉,凑活看吧
Option Explicit
Dim Arr(5) '必须声明数组大小
Dim A,B,C
Dim j
B=InputBox("Now,Please writing B")' 元素数不能大于声明最大值
For A=0 To B'输入元素值
Arr(A)= InputBox("Now,Please writing A as well")
Arr(A)= Int(Arr(A))
If IsNumeric(Arr(A))=True then'处理意外
Else
WScript.Quit  
End If
Next
B1'调用
For j=0 To ubound(Arr)' 结果
C=C&" "&Arr(j) '链接数组每个元素
Next
WScript.Echo "Arr数组:" & C
Function B1
Dim i,n
'***********************************
'不用第三个变量交换
For i = 0 To ubound(Arr)'从大到小排序
For n = i To ubound(Arr)
If Arr(i) < Arr(n) Then
Arr(i) = Arr(i) + Arr(n)
Arr(n) = Arr(i) - Arr(n)
Arr(i) = Arr(i) - Arr(n)
End If
Next
Next
End FunctionCOPY
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

思必达是垃圾站,那都是水军发的贴

TOP

回复 2# ivor


    Dim Arr() 声明的是动态数组


------------------------------------------------------------


仔细看了下楼主的代码,有几个问题
Option Explicit
Dim Arr()
Dim A,B,C
Dim j

B=InputBox("Now,Please writing B")'元素数

For A=0 To B-1'输入元素值
        ReDim Preserve Arr(A+1)
        Arr(A)= InputBox("Now,Please writing A as well")
        Arr(A)= Int(Arr(A))
        If IsNumeric(Arr(A))=True then'处理意外
        Else
                WScript.Quit  
        End If
Next

B1'调用

For j=0 To B-1'结果
        C=C&" "&Arr(j)
Next

WScript.Echo C

Function B1
        Dim i,n,t
       
        For i = 0 To B-1'排序
                For n = i To B
                        If Arr(i) < Arr(n) Then
                                t = Arr(i)
                                Arr(i) = Arr(n)
                                Arr(n) = t
                        End If
                Next
        Next
End Function

TOP

返回列表