當前位置:編程學習大全網 - 源碼下載 - 求vb 快速排序算法、插入排序源代碼!!!!追加分!!!

求vb 快速排序算法、插入排序源代碼!!!!追加分!!!

Option Explicit

Private Sub Form_Load()

Dim i As Integer, intC As Integer

Dim IntOuSus() As String, strOuSus As String

Dim IntJiSus() As String, strJiSus As String

Randomize

For i = 1 To 30

intC = CInt(Rnd * 90) + 10

If intC Mod 2 = 1 Then

strJiSus = strJiSus & IIf(strJiSus = "", "", ",") & intC

Else

strOuSus = strOuSus & IIf(strOuSus = "", "", ",") & intC

End If

Next

IntOuSus = Split(strOuSus, ",")

IntJiSus = Split(strJiSus, ",")

OrderNumbers IntJiSus, "ASC"

OrderNumbers IntOuSus, "DESC"

End Sub

'註意以下過程中第壹個參數使用了ByRef

'此方法比傳統的冒泡法快得多

Private Sub OrderNumbers(ByRef a() As String, Optional ByVal ASCDESC As String = "ASC")

Dim min As Long, max As Long, num As Long, first As Long, last As Long, temp As Long, all As New Collection, steps As Long

ASCDESC = UCase(ASCDESC)

min = LBound(a)

max = UBound(a)

all.Add a(min)

steps = 1

For num = min + 1 To max

last = all.Count

If a(num) < CDbl(all(1)) Then all.Add a(num), BEFORE:=1: GoTo nextnum '加到第壹項

If a(num) > CDbl(all(last)) Then all.Add a(num), AFTER:=last: GoTo nextnum '加到最後壹項

first = 1

Do While last > first + 1 '利用DO循環減少循環次數

temp = (last + first) \ 2

If a(num) > CDbl(all(temp)) Then

first = temp

Else

last = temp

steps = steps + 1

End If

Loop

all.Add a(num), BEFORE:=last '加到指定的索引

nextnum:

steps = steps + 1

Next

For num = min To max

If ASCDESC = "ASC" Then a(num) = CDbl(all(num - min + 1)): steps = steps + 1 '升序

If ASCDESC = "DESC" Then a(num) = CDbl(all(max - num + 1)): steps = steps + 1 '降序

Next

'MsgBox "本數組***經過 " & steps & "步實現" & IIf(ASCDESC = "ASC", "升序", "降序") & "排序!", 64, "INFORMATION"

Set all = Nothing

End Sub

  • 上一篇:春晚轉圈的女孩 有他的資料嗎
  • 下一篇:推廣小程序店鋪要花多少錢?
  • copyright 2024編程學習大全網