[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 请问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 编辑
  1. For A=0 To B'输入元素值
  2. ReDim Arr(A)
复制代码
ReDim Arr(A)去掉,你犯了低级错误,Arr变成局部变量了

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

TOP

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

回复 1# 793150834

差点没把我看吐了,错误的太多,我修改了一下,我VB不熟悉,凑活看吧
  1. Option Explicit
  2. Dim Arr(5) '必须声明数组大小
  3. Dim A,B,C
  4. Dim j
  5. B=InputBox("Now,Please writing B")' 元素数不能大于声明最大值
  6. For A=0 To B'输入元素值
  7. Arr(A)= InputBox("Now,Please writing A as well")
  8. Arr(A)= Int(Arr(A))
  9. If IsNumeric(Arr(A))=True then'处理意外
  10. Else
  11. WScript.Quit  
  12. End If
  13. Next
  14. B1'调用
  15. For j=0 To ubound(Arr)' 结果
  16. C=C&" "&Arr(j) '链接数组每个元素
  17. Next
  18. WScript.Echo "Arr数组:" & C
  19. Function B1
  20. Dim i,n
  21. '***********************************
  22. '不用第三个变量交换
  23. For i = 0 To ubound(Arr)'从大到小排序
  24. For n = i To ubound(Arr)
  25. If Arr(i) < Arr(n) Then
  26. Arr(i) = Arr(i) + Arr(n)
  27. Arr(n) = Arr(i) - Arr(n)
  28. Arr(i) = Arr(i) - Arr(n)
  29. End If
  30. Next
  31. Next
  32. End Function
复制代码
#&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

返回列表