クイックソートについて質問です。下記の関数を用いてクイックソートのプログラムを書きました。ここには記載していませんがほかにもバブルソートなどのソートを書き実際に動かしてみたのですが、クイックソートのみが正常に動きませんでした。再起呼び出しを用いた関数DivisionSort()について、修正点ありましたらよろしくお願いします。
Public
1 Dim Data() As Integer 2 Dim StartData() As Integer 3 4 Private Sub GenerateData(ByVal numOfData As Integer) 5 ReDim Data(numOfData) 6 Dim r As New System.Random 7 For i As Integer = 1 To numOfData 8 Data(i) = r.Next(1, 100001) 9 Next 10 End Sub 11 12 Private Sub saveData() 13 ReDim StartData(Data.Length) 14 For i As Integer = 1 To Data.Length - 1 15 StartData(i) = Data(i) 16 Next 17 End Sub 18 19 Private Sub loadData() 20 For i As Integer = 1 To Data.Length - 1 21 Data(i) = StartData(i) 22 Next 23 End Sub 24 25 Private Sub PrintData(ByVal Obj As Object) 26 Obj.Clear() 27 Dim sb As New System.Text.StringBuilder(7 * Data.Length) 28 For i As Integer = 1 To Data.Length - 1 29 sb.Append(Data(i) & vbCrLf) 30 Next 31 Obj.text = sb.ToString 32 End Sub 33 34 Private Sub QuickSort() 35 DivisionSort(1, Data.Length - 1) 36 End Sub 37 38Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 39 GenerateData(20) 40 saveData() 41 PrintData(TextBox1) 42 End Sub 43 44 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 45 loadData() 46 insertionSort() 47 PrintData(TextBox2) 48 End Sub 49 50 Private Sub DivisionSort(minNo As Integer, maxNo As Integer) 51 Dim i As Integer = minNo 52 Dim j As Integer = maxNo 53 Dim pivot As Integer = Data(Int((minNo + maxNo) / 2)) 54 Dim temp As Integer 55 While True 56 While Data(i) < pivot 57 i += 1 58 End While 59 60 While pivot < Data(j) 61 j -= 1 62 End While 63 64 If i >= j Then Exit While 65 66 If (i <= j) Then 67 temp = Data(i) 68 Data(i) = Data(j) 69 Data(j) = temp 70 i += 1 71 j -= 1 72 End If 73 74 If minNo < i - 1 Then 75 DivisionSort(minNo, i - 1) 76 End If 77 78 If j + 1 < maxNo Then 79 DivisionSort(j + 1, maxNo) 80 End If 81 End While 82 End Sub 83 84 Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click 85 loadData() 86 QuickSort() 87 PrintData(TextBox2.Text) 88 End Sub 89End Class
あなたの回答
tips
プレビュー