Option Explicit Dim unit As Integer Dim maxItem As Integer Public Sub restart() Dim a() As Integer Dim i As Integer Dim timeElapsed As Single Let ScaleHeight = ScaleWidth Let maxItem = Val(txtItem.Text) If Not (maxItem >= 10) Or _ Not (maxItem <= 500) Then MsgBox "Please enter the item value between 10-500" Exit Sub End If ReDim a(0 To maxItem) As Integer Let unit = ScaleWidth / maxItem Let Label1.Caption = "initializing..." If comboCase.ListIndex = 0 Then randomCase a() ElseIf comboCase.ListIndex = 1 Then worstCase a() ElseIf comboCase.ListIndex = 2 Then bestCase a() End If Let Label1.Caption = "Sorting..." Let timeElapsed = Timer If ComboSort.ListIndex = 0 Then selectSort a() ElseIf ComboSort.ListIndex = 1 Then bubbleSort a() ElseIf ComboSort.ListIndex = 2 Then insertSort a() ElseIf ComboSort.ListIndex = 3 Then shakerSort a() ElseIf ComboSort.ListIndex = 4 Then quickSort 1, maxItem, a() End If Let Label1.Caption = (Timer - timeElapsed) & "second(s) elapsed" End Sub Private Sub quickSort(l As Integer, r As Integer, ByRef a() As Integer) Dim min As Integer, temp As Integer Dim i As Integer, j As Integer Dim m As Integer, w As Integer Let i = l Let j = r Let temp = a((l + r) / 2) Do Do While a(i) < temp Let i = i + 1 Loop Do While a(j) > temp Let j = j - 1 Loop If i <= j Then Let w = a(i) Let a(i) = a(j) Let a(j) = w Let i = i + 1 Let j = j - 1 End If Loop Until i > j showDots a() If l < j Then quickSort l, j, a() If i < r Then quickSort i, r, a() End Sub Private Sub selectSort(ByRef a() As Integer) Dim i As Integer, j As Integer Dim min As Integer, index As Integer Dim temp As Integer For i = 1 To UBound(a) - 1 Let min = a(i) Let index = i For j = i + 1 To UBound(a) If a(j) < min Then Let min = a(j) Let index = j End If Next Let temp = a(i) Let a(i) = a(index) Let a(index) = temp showDots a() Next End Sub Private Sub bubbleSort(ByRef a() As Integer) Dim i As Integer Dim j As Integer Dim temp As Integer For i = UBound(a) To 1 Step -1 For j = 2 To i If a(j - 1) > a(j) Then Let temp = a(j - 1) Let a(j - 1) = a(j) Let a(j) = temp End If Next showDots a() Next End Sub Private Sub insertSort(ByRef a() As Integer) Dim i As Integer Dim j As Integer Dim temp As Integer For i = 2 To UBound(a) Let temp = a(i) Let a(0) = temp Let j = i Do While a(j - 1) > temp Let a(j) = a(j - 1) Let j = j - 1 Loop Let a(j) = temp showDots a() Next End Sub Private Sub shakerSort(ByRef a() As Integer) Dim i As Integer, j As Integer, k As Integer Dim r As Integer, l As Integer, temp As Integer Let l = 2 Let r = UBound(a) Let k = UBound(a) Do For j = r To l Step -1 If a(j - 1) > a(j) Then Let temp = a(j - 1) Let a(j - 1) = a(j) Let a(j) = temp Let k = j End If Next Let l = k + 1 For j = l To r If a(j - 1) > a(j) Then Let temp = a(j - 1) Let a(j - 1) = a(j) Let a(j) = temp Let k = j End If Next Let r = k - 1 showDots a() Loop Until l > r End Sub Private Sub showDots(ByRef a() As Integer) Dim i As Integer Cls For i = 1 To UBound(a) Circle (a(i) * unit, ScaleHeight - i * unit), 10, QBColor(Int(Rnd * 15) + 1) Next End Sub Private Sub bestCase(ByRef a() As Integer) Dim i As Integer Randomize Timer For i = 1 To maxItem Let a(i) = i Next End Sub Private Sub worstCase(ByRef a() As Integer) Dim i As Integer Randomize Timer For i = 1 To maxItem Let a(i) = (maxItem - i) + 1 Next End Sub Private Sub randomCase(ByRef a() As Integer) Dim i As Integer Randomize Timer For i = 1 To maxItem Let a(i) = Int(Rnd * maxItem) + 1 Next End Sub Private Sub start_Click() Call restart End Sub Private Sub UserControl_Show() comboCase.ListIndex = 0 comboCase.Text = comboCase.List(comboCase.ListIndex) ComboSort.ListIndex = 0 ComboSort.Text = ComboSort.List(ComboSort.ListIndex) End Sub