VBScriptでコムソート

VBScriptでクイックソートを使ってたらスタックが不足したので、 コムソートを使ってみた。

VBScriptでコムソート

VBScript でクイックソートを使ってたらスタックが不足したので、 コムソートを使ってみた。 ついでに処理時間を計測して比較して見る。

VBScript版クイックソート

Sub QuickSort(SortArr)
 Dim pivot, i, j
 pivot = SortArr(Int((l + r) / 2)) 'SortArr(l)
 i = LBound(SortArr): j = UBound(SortArr)
 Do
  While SortArr(i) > pivot: i = i + 1: Wend ' 昇順:<、降順:>
  While SortArr(j) < pivot: j = j - 1: Wend ' 昇順:>、降順:<
  If i >= j Then Exit Do
  Swap SortArr, i, j
  i = i + 1: j = j - 1
 Loop
 If l < i - 1 Then QuickSort SortArr, l, i - 1
 If j + 1 < r Then QuickSort SortArr, j + 1, r
End Sub

VBScript版コムソート

Sub CombSort(SortArr)
 Dim h, swapped, i, j, temp
 h = UBound(SortArr)
 swapped = False
 Do While h > 1 Or swapped
  h = Int(h/1.3)
  If h = 9 Or h = 10 Then h = 11 ' CombSort11
  If h < 1 Then h = 1
  swapped = False
  For i = 0 To UBound(SortArr) - h
   If SortArr(i) > SortArr(i + h) Then ' 昇順:>、 降順:<
    temp = SortArr(i)
    SortArr(i) = SortArr(i + h)
    SortArr(i + h) = temp
    swapped = True
   End If
  Next
 Loop
End Sub

計測は乱数データ数6種類の10回平均で比較。 計60個の乱数をクイックソート・コムソートでソートしてます。

クイックソートとコムソートの処理時間の比較

クイックソートとコムソートの処理時間の比較

クイックソートが圧勝でした。 平均2倍コムソートのほうが時間がかかります。 非再帰クイックソートを組んだほうが良かったような(´・ω・`) ただ処理時間のばらつきがコムソートのほうがないです。

Blog Comments powered by Disqus.