[VB]冒泡排序

[VB]冒泡排序,第1张

这是升序:

dim shuru(1 to 5)

private sub form_load()

for i = 1 to 5

a(i) = inputbox("请输入第":i:"个数")

print a(i)

next i

for i = 1 to 4

for j = i + 1 to 5

if a(i) >= a(j) then

a1 = a(i)

a(i) = a(j)

a(j) = a1

next j,i

end if

for i = 1 to 5

print a(i)

next i

end sub

这是降序:

dim shuru(1 to 5)

private sub form_load()

for i = 1 to 5

a(i) = inputbox("请输入第":i:"个数")

print a(i)

next i

for i = 1 to 4

for j = i + 1 to 5

if a(i) <= a(j) then

a1 = a(i)

a(i) = a(j)

a(j) = a1

next j,i

end if

for i = 1 to 5

print a(i)

next i

end sub

区别在于先冒出的是大数还是小数

小数就是升序

大数就是降序

Private Sub Command1_Click()

a = Val(InputBox("请输入第一个数:"))

b = Val(InputBox("请输入第二个数:"))

c = Val(InputBox("请输入第三个数:"))

s = "输入的三个数为:" & a & ", " & b & ", " & c & vbCrLf

If a > b Then t = a: a = b: b = t

If a > c Then t = a: a = c: c = t

If b > c Then t = b: b = c: c = t

MsgBox s & "三个数从小到大为:" & a & ", " & b & ", " & c

End Sub

扩展资料:

所以往往评价一个排序算法的好坏往往可以从下边几个方面入手:

(1)时间复杂度:即从序列的初始状态到经过排序算法的变换移位等 *** 作变到最终排序好的结果状态的过程所花费的时间度量。

(2)空间复杂度:就是从序列的初始状态经过排序移位变换的过程一直到最终的状态所花费的空间开销。

(3)使用场景:排序算法有很多,不同种类的排序算法适合不同种类的情景,可能有时候需要节省空间对时间要求没那么多,反之,有时候则是希望多考虑一些时间,对空间要求没那么高,总之一般都会必须从某一方面做出抉择。

(4)稳定性:稳定性是不管考虑时间和空间必须要考虑的问题,往往也是非常重要的影响选择的因素。 

-排序算法

Open "C:\testtxt" For Input As #1

    Buffer = StrConv(InputB(LOF(1), 1), vbUnicode)

Close #1

Buffer = Split(Buffer, vbNewLine)

    For j = 0 To UBound(Buffer) - 1

        For k = j + 1 To UBound(Buffer)

            NumJ = Split(Buffer(j), vbTab)

            NumX = Split(Buffer(k), vbTab)

            If Val(NumJ(1)) < Val(NumX(1)) Then

                Temp = Buffer(j)

                Buffer(j) = Buffer(k)

                Buffer(k) = Temp

            End If

        Next k

    Next j

    

    For z = 0 To UBound(Buffer)

        Print Buffer(z)

    Next z

已帮你搞定!需要注意中间必须用TAB分割,不要用空格

Private Sub Command1_Click()

  Dim strArray() As String, intArray() As Integer, strArray1() As String, strConversionArray() As String

  Dim x(6), y(6), z(6), intOneDimensionalArray() As Integer

  Text1Text = Trim(Text1Text)

  strArray = Split(Text1Text, " ")

  ReDim strArray1(UBound(strArray) - LBound(strArray), 3), strConversionArray(UBound(strArray) - LBound(strArray), 6)

  For i = LBound(strArray) To UBound(strArray)

    For j = 1 To 3

      strArray1(i, j) = Mid(strArray(i), j, 1)

    Next j

  Next i

  ReDim strConversionArray(UBound(strArray) - LBound(strArray), 6)

  For i = 1 To 6

    x(i) = (i + 1) \ 2

  Next i

  y(1) = 2: y(2) = 3: y(3) = 1: y(4) = 3: y(5) = 1: y(6) = 2

  z(1) = 3: z(2) = 2: z(3) = 3: z(4) = 1: z(5) = 2: z(6) = 1

  For i = LBound(strArray) To UBound(strArray)

    For j = 1 To 6

        strConversionArray(i, j) = strArray1(i, x(j)) + strArray1(i, y(j)) + strArray1(i, z(j))

    Next j

  Next i

  ReDim intArray(UBound(strArray) - LBound(strArray), 6)

  For i = LBound(strArray) To UBound(strArray)

    For j = 1 To 6

      intArray(i, j) = Val(strConversionArray(i, j))

    Next j

  Next i

  ReDim intOneDimensionalArray(((UBound(strArray) - LBound(strArray)) + 1) 6)

  For i = LBound(strArray) To UBound(strArray)

    For j = 1 To 6

      intOneDimensionalArray(r) = intArray(i, j)

      r = r + 1

    Next j

  Next i

  For i = LBound(intOneDimensionalArray) To UBound(intOneDimensionalArray) - 1

    For j = i + 1 To UBound(intOneDimensionalArray)

      If intOneDimensionalArray(j) < intOneDimensionalArray(i) Then

        t = intOneDimensionalArray(i)

        intOneDimensionalArray(i) = intOneDimensionalArray(j)

        intOneDimensionalArray(j) = t

      End If

    Next j

  Next i

  For i = LBound(intOneDimensionalArray) + 1 To UBound(intOneDimensionalArray)

    Text2Text = Text2Text + CStr(intOneDimensionalArray(i)) + Space(1)

  Next i

End Sub

Private SubCommand1_Click()Dim a(), n AsIntegern = 10ReDim a(n)For i = 1 To n a(i) = Int(Rnd 100)NextCall Sort(a, n)For i = 1 To n Print a(i)NextEnd Sub Sub Sort(ByRef a,n As Integer)Dim i, j, x AsIntegerFor i = 1 To n For j = i + 1 To n If a(i) > a(j) Then x = a(i) a(i) = a(j) a(j) = x End If NextNextEnd Sub

Sub sort(a())

Dim i As Long, j As Long, k As Variant

For i = 1 To UBound(a)

For j = 0 To i

If a(j) < a(i) Then

k = a(j)

a(j) = a(i)

a(i) = k

End If

Next

Next

End Sub

Private Sub Command1_Click()

Dim a, b, c, d, e

Dim s()

a = Int(Rnd 1000)

b = Int(Rnd 1000)

c = Int(Rnd 1000)

d = Int(Rnd 1000)

e = Int(Rnd 1000)

s = Array(a, b, c, d, e)

sort s

a = s(0)

b = s(1)

c = s(2)

d = s(3)

e = s(4)

Print a, b, c, d, e

End Sub

不过建议你用数组而不是单个变量来储存这些数值,这样代码将会简单得多。

什么都不说,先上效果图——

编码——

Private Sub Command1_Click()

Dim s1 As String, s_num As String, a As String

Dim lennum As Integer, lenuchar As Integer, lenlchar As Integer

Dim s_lchar As String, s_uchar As String

Dim i As Integer, length As Integer, value As Integer

s1 = Text1Text

s_num = ""         '用来存放数字的字符串变量

s_uchar = ""        '用来存放大写字母的字符串变量

s_lchar = ""        '用来存放小写字母的字符串变量

length = Len(s1)

For i = 1 To length

    a = Mid(s1, i, 1)

    value = Asc(a)

    Text2Text = value

    If value >= 48 And value <= 57 Then s_num = s_num & a

    If value >= 65 And value <= 90 Then s_uchar = s_uchar & a

    If value >= 97 And value <= 122 Then s_lchar = s_lchar & a

Next i

' 把字符串中的各种字符分类成 数字类,大写字母,小写字母

lennum = Len(s_num)

lenuchar = Len(s_uchar)

lenlchar = Len(s_lchar)

Dim sz() As Integer    '定义动态数组

Dim temp As Integer

ReDim sz(1 To lennum) As Integer   '定义数组供 数字的ASCII码

For i = 1 To lennum

    a = Mid(s_num, i, 1)

    sz(i) = Asc(a)

Next i

For i = lennum To 1 Step -1         '最常用的冒泡排序法

    For j = 1 To i - 1

        If sz(j) > sz(j + 1) Then temp = sz(j): sz(j) = sz(j + 1): sz(j + 1) = temp

    Next j

Next i

s_num = ""              '清空s_num ,因为要重新排列了

For i = 1 To lennum

    s_num = s_num & Chr(sz(i))

Next i

ReDim sz(1 To lenuchar) As Integer  '重新定义数组供 大写字母的ASCII码,接下来程序思路与上面类似

For i = 1 To lenuchar

    a = Mid(s_uchar, i, 1)

    sz(i) = Asc(a)

Next i

For i = lenuchar To 1 Step -1

    For j = 1 To i - 1

        If sz(j) > sz(j + 1) Then temp = sz(j): sz(j) = sz(j + 1): sz(j + 1) = temp

    Next j

Next i

s_uchar = ""

For i = 1 To lenuchar

    s_uchar = s_uchar & Chr(sz(i))

Next i

ReDim sz(1 To lenlchar) As Integer  '重新定义数组供 小写字母的ASCII码,接下来程序思路与上面类似

For i = 1 To lenlchar

    a = Mid(s_lchar, i, 1)

    sz(i) = Asc(a)

Next i

For i = lenlchar To 1 Step -1

    For j = 1 To i - 1

        If sz(j) > sz(j + 1) Then temp = sz(j): sz(j) = sz(j + 1): sz(j + 1) = temp

    Next j

Next i

s_lchar = ""

For i = 1 To lenlchar

    s_lchar = s_lchar & Chr(sz(i))

Next i

    

Text2Text = s_uchar & s_lchar & s_num

End Sub

该程序主要运用了Asc()函数获得ASCII码来分辨字母与数字,用 动态数组和重定义来多次运用数组进行排序(冒泡排序法)和赋值 *** 作,用chr()函数还原字符串。

我的程序有点略长,中间有少许重复部分,但我觉得思路比较清晰易懂,适合初学者。你也可以试着自己改进。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13492376.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存