BubleSort1



'min and max are the minimum and maximum indexes

'of the items that might still be out of order.

Sub BubbleSort (List() As Long, ByVal min As Integer, _
ByVal max As Integer)
Dim last_swap As Integer
Dim i As Integer
Dim j As Integer
Dim tmp As Long
' Repeat until we are done.

Do While min < max
' Bubble up.

last_swap = min - 1
' For i = min + 1 To max

i = min + 1
Do While i <= max
' Find a bubble.

If List(i - 1) > List(i) Then
' See where to drop the bubble.

tmp = List(i - 1)
j = i
Do
List(j - 1) = List(j)
j = j + 1
If j > max Then Exit Do
Loop While List(j) < tmp
List(j - 1) = tmp
last_swap = j - 1
i = j + 1
Else
i = i + 1
End If
Loop
' Update max.

max = last_swap - 1
' Bubble down.

last_swap = max + 1
' For i = max - 1 To min Step -1

i = max - 1
Do While i >= min
' Find a bubble.

If List(i + 1) < List(i) Then
' See where to drop the bubble.

tmp = List(i + 1)
j = i
Do
List(j + 1) = List(j)
j = j - 1
If j < min Then Exit Do
Loop While List(j) > tmp
List(j + 1) = tmp
last_swap = j + 1
i = j - 1
Else
i = i - 1
End If
Loop
' Update min.

min = last_swap + 1
Loop
End Sub

***********************************
Listing 1. Bubblesort.

(bublesort1.html)- by Paolo Puglisi - Modifica del 25/3/2019