掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
クイックソートの昇順と降順について (ID:120441)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
回答じゃないけど不等号しか違わないなら1つの関数にしちゃうなぁ。 ※注 デバッグして動作確認してるワケではありません。質問のコードを 正しいものと仮定して適当にまとめただけです。参考にする方は考え方 のみ盗んで下さい。 [VB6.0] '** クイックソート昇順 Public Sub QuickSortA(d() As String, StartNum As Variant, EndNum As Variant) Call QuickSortByKeyCol(d, 1, False, CLng(StartNum), CLng(EndNum)) End Sub '** クイックソート降順 Public Sub QuickSortD(d() As String, StartNum As Variant, EndNum As Variant) Call QuickSortByKeyCol(d, 1, True, CLng(StartNum), CLng(EndNum)) End Sub '** 列指定クイックソート Public Sub QuickSortByKeyCol(ByRef d() As String, _ ByVal ColX As Long, ByVal OrderDescend As Boolean, _ ByVal StartNum As Long, ByVal EndNum As Long) Dim i As Long Dim j As Long Dim n As Long Dim strBoundary As String Dim strTemp As String If StartNum >= EndNum Then Exit Sub strBoundary = d((StartNum + EndNum) \ 2, ColX) i = StartNum j = EndNum Do Do If OrderDescend Then If Not (d(i, ColX) > strBoundary) Then Exit Do Else If Not (d(i, ColX) < strBoundary) Then Exit Do End If i = i + 1 Loop Do If OrderDescend Then If Not (strBoundary > d(j, ColX)) Then Exit Do Else If Not (strBoundary < d(j, ColX)) Then Exit Do End If j = j - 1 Loop If i >= j Then Exit Do For n = LBound(d, 2) To UBound(d, 2) strTemp = d(i, n) d(i, n) = d(j, n) d(j, n) = strTemp Next i = i + 1 j = j - 1 Loop If (StartNum < i - 1) Then QuickSortByKeyCol d(), ColX, OrderDescend, StartNum, i - 1 If (EndNum > j + 1) Then QuickSortByKeyCol d(), ColX, OrderDescend, j + 1, EndNum End Sub
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.