1.直接插入排序
Public Sub InsertSort()
Dim Arr(10) As Integer
For i = 1 To 10
Arr(i) = Int(Rnd() * 100)
Cells(i, 1).Value = Arr(i)
Next
For i = 2 To 10
If Arr(i) < Arr(i - 1) Then
tmp = Arr(i)
j = i
Do
tmp = Arr(j)
Arr(j) = Arr(j - 1)
Arr(j - 1) = tmp
j = j - 1
Loop While tmp < Arr(j - 1)
End If
Next i
For i = 1 To 10
Cells(i, 2).Value = Arr(i)
Next
End Sub
2.簡單選擇排序
Public Sub SelectSort()
Dim Arr(10) As Integer
For i = 1 To 10
Arr(i) = Int(Rnd() * 100)
Cells(i, 1).Value = Arr(i)
Next
For i = 1 To 10
k = i
For j = i + 1 To 10
If Arr(j) < Arr(k) Then
k = j
End If
Next j
If i <> k Then
tmp = Arr(i)
Arr(i) = Arr(k)
Arr(k) = tmp
End If
Next i
For i = 1 To 10
Cells(i, 2).Value = Arr(i)
Next
End Sub
3.冒泡排序
Public Sub BubbleSort()
Dim Arr(10) As Integer
For i = 1 To 10
Arr(i) = Int(Rnd() * 100)
Cells(i, 1).Value = Arr(i)
Next
For i = 1 To 10
flag = 0
For j = 10 To i + 1 Step -1
If Arr(j) < Arr(j - 1) Then
tmp = Arr(j)
Arr(j) = Arr(j - 1)
Arr(j - 1) = tmp
flag = 1
End If
Next j
If flag = 0 Then
Exit For
End If
Next i
For i = 1 To 10
Cells(i, 2).Value = Arr(i)
Next
End Sub
4.希爾排序
Public Sub ShellSort()
Dim Arr(10) As Integer
For i = 1 To 10
Arr(i) = Int(Rnd() * 100)
Cells(i, 1).Value = Arr(i)
Next
h = 5
Do While h > 0
For i = h To 10
If Arr(i) < Arr(i - 1) Then
tmp = Arr(i)
j = i
Do
tmp = Arr(j)
Arr(j) = Arr(j - 1)
Arr(j - 1) = tmp
j = j - 1
Loop While tmp < Arr(j - 1)
End If
Next i
h = h - 2
Loop
For i = 1 To 10
Cells(i, 2).Value = Arr(i)
Next
End Sub
5.快速排序
Public Sub Kuaisu()
Dim Arr(10) As Integer
For i = 1 To 10
Arr(i) = Int(Rnd() * 100)
Cells(i, 1).Value = Arr(i)
Next
Call Kuaisusort(Arr(), 1, 10)
For i = 1 To 10
Cells(i, 2).Value = Arr(i)
Next
End Sub
Public Function Partition(Tarr() As Integer, Left As Integer, Right As Integer) As Integer
Pivot = Tarr(Left)
low = Left
Hight = Right
Do While (low <> Hight)
If Tarr(Hight) > Pivot Then
Hight = Hight - 1
ElseIf Tarr(low) <= Pivot Then
low = low + 1
Else
Tmp = Tarr(low)
Tarr(low) = Tarr(Hight)
Tarr(Hight) = Tmp
End If
Loop
Tarr(Left) = Tarr(low)
Tarr(low) = Pivot
Partition = low
End Function
Public Sub Kuaisusort(Tarr() As Integer, Left As Integer, Right As Integer)
If Left < Right Then
Pt = Partition(Tarr(), Left, Right)
Call Kuaisusort(Tarr(), Left, Pt - 1)
Call Kuaisusort(Tarr(), Pt + 1, Right)
End If
End Sub
6.堆排序
Public Sub DuiSort()
Dim Arr(10) As Integer
For i = 1 To 10
Arr(i) = Int(Rnd() * 100)
Cells(i, 1).Value = Arr(i)
Next
j = 10
Do While j > 0
For i = (j \ 2) To 1 Step -1
m = 2 * i
n = 2 * i + 1
If n < j Then
If Arr(i) < Arr(n) Then
tmp = Arr(i)
Arr(i) = Arr(n)
Arr(n) = tmp
End If
End If
If Arr(i) < Arr(m) Then
tmp = Arr(i)
Arr(i) = Arr(m)
Arr(m) = tmp
End If
Next
tmp = Arr(j)
Arr(j) = Arr(1)
Arr(1) = tmp
j = j - 1
Loop
For i = 1 To 10
Cells(i, 2).Value = Arr(i)
Next
End Sub

被折叠的 条评论
为什么被折叠?



