1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
Module Module1
'liste mit 15 Elementen, welches später sortiert werden soll deklarieren
Dim list_to_be_sorted(15) As Integer
'Hilfsroutine um ein Integer-Array in der Konsole auszugeben
Sub print_list(ByRef liste() As Integer)
For Each element In liste
Console.Write(element.ToString & " ")
Next
Console.WriteLine("-")
End Sub
'Hilfsroutine um eine Liste von Integern in der Konsole auszugeben
Sub print_list(ByRef liste As List(Of Integer))
For Each element In liste
Console.Write(element.ToString & " ")
Next
Console.WriteLine("-")
End Sub
'Methode um ein liste mit Zufallswerten zu initialisieren
Sub initialize_list(ByRef liste() As Integer)
'Zufallsgenerator initialisieren
Dim r As New Random(System.DateTime.Now.Millisecond)
'Jedem Element der Schleife einen zufälligen Wert zuweisen
For i As Integer = 0 To liste.Length - 1
'Zufallszahl zwischen 0 und 10.000 erzeugen und zuweisen
liste(i) = r.Next(0, 10000)
Next
End Sub
'Hilfsmethode um zwei stellen im liste zu vertauschen
Sub swap(ByRef x As Integer, ByRef y As Integer)
Dim tmp As Integer
tmp = x
x = y
y = tmp
End Sub
'VB Implementierung des BubbleSort-Algorithmus wie er auf Wikipedia beschrieben ist: http://de.wikipedia.org/wiki/Bubblesort
Sub bubblesort(ByRef liste() As Integer)
Dim n As Integer = liste.Length
Dim swapped As Boolean
Do
swapped = False
For i As Integer = 0 To n - 2
If (liste(i) > liste(i + 1)) Then
swap(liste(i), liste(i + 1))
swapped = True
End If
Next
n = n - 1
Loop While n > 1
End Sub
'VB Implementierung des Insertionsort-Algorithmus wie er auf Wikipedia beschrieben ist: http://de.wikipedia.org/wiki/Insertionsort
Sub insertionsort(ByRef liste() As Integer) '
Dim val, j As Integer
For i As Integer = 1 To liste.Length - 1
val = liste(i)
j = i
While (j > 0 AndAlso liste(j - 1) > val)
liste(j) = liste(j - 1)
j = j - 1
liste(j) = val
End While
Next
End Sub
' MergeSort implementation
Sub MergeSort(ByRef szArray As List(Of Integer), ByVal nLower As Integer, ByVal nUpper As Integer)
' Check for array size
Dim szSwap As String
If (nUpper - nLower) = 1 Then
' Swap strings if necessary
If szArray(nLower).CompareTo(szArray(nUpper)) > 0 Then
szSwap = szArray(nLower)
szArray(nLower) = szArray(nUpper)
szArray(nUpper) = szSwap
End If
ElseIf (nUpper - nLower) > 1 Then
' Sort each half and merge
MergeSort(szArray, nLower, (nLower + nUpper) / 2)
MergeSort(szArray, (nLower + nUpper) / 2 + 1, nUpper)
Merge(szArray, nLower, (nLower + nUpper) / 2 + 1, nUpper)
End If
End Sub
Sub Merge(ByRef szArray As List(Of Integer), ByVal nLower As Integer, ByVal nMiddle As Integer, ByVal nUpper As Integer)
Dim nIndex As Integer
Dim szBuffer As New List(Of Integer)()
Dim i, j As Integer
i = nLower
j = nMiddle
While i < nMiddle And j <= nUpper
If (szArray(i).CompareTo(szArray(j)) < 0) Then
szBuffer.Add(szArray(i))
i = i + 1
Else
szBuffer.Add(szArray(j))
j = j + 1
End If
End While
While i < nMiddle
szBuffer.Add(szArray(i))
i = i + 1
End While
While j <= nUpper
szBuffer.Add(szArray(j))
j = j + 1
End While
nIndex = 0
For i = nLower To nUpper
szArray(i) = szBuffer(nIndex)
nIndex = nIndex + 1
Next i
End Sub
Public Function QuickSort(ByVal list As List(Of Integer)) As List(Of Integer)
If list.Count < 1 Then Return list
Dim Smaller As New List(Of Integer)
Dim Larger As New List(Of Integer)
Dim pt As Integer = 0
QuickSort = New List(Of Integer)
Dim pv As Integer = list(Int(Rnd() * list.Count))
For i As Integer = 0 To list.Count - 1
Select Case list(i)
Case Is = pv
pt += 1
Case Is < pv
Smaller.Add(list(i))
Case Is > pv
Larger.Add(list(i))
End Select
Next
QuickSort.AddRange(QuickSort(Smaller))
While pt > 0
QuickSort.Add(pv)
pt -= 1
End While
QuickSort.AddRange(QuickSort(Larger))
End Function
Sub Main()
Dim al As List(Of Integer) = New List(Of Integer)
initialize_list(list_to_be_sorted)
al.AddRange(list_to_be_sorted)
print_list(list_to_be_sorted)
'bubblesort(liste_to_be_sorted)
'insertionsort(liste_to_be_sorted)
'MergeSort(al, 0, list_to_be_sorted.Length - 1)
al = QuickSort(al)
print_list(al)
'print_list(list_to_be_sorted)
Console.ReadKey()
End Sub
End Module
|