A 2-D Bubble Sort Subroutine

Sort routines for a single list of values have been around for awhile, but
recently I needed to sort a list of form names and keep the corresponding list
of form aliases correctly associated.

I modified a Bubble Sort routine I've used in the past to input two variant
arrays, sort the first in ascending order, and reorder the second array to
correspond with each item's original first-array partner.
' Paste the Sub into the Declarations section of a form, button, etc.

Sub Bubble_Sort2 (ary1 As Variant, ary2 As Variant)

' Returns sorted array for ary1 and corresponding values for ary2
' based on a complexity of O(n^2) using a bubble sort
Dim top1, top2, bot1, bot2, cur, cur2 As Integer
Dim tmp1, tmp2 As Variant
If Not Isarray(ary1) Then Print "SORT: First variant not an array" :Exit Sub
If Not Isarray(ary2) Then Print "SORT: Second variant not an array" :Exit Sub
top1=Ubound (ary1)
top2=Ubound (ary2)
bot1=Lbound (ary1)
bot2=Lbound (ary2)
If top1=bot1 Then Print "SORT: Single-value array" : Exit Sub
If (top1-bot1)<>(top2-bot2) Then Print "SORT: Arrays not same size" : Exit Sub
For cur=bot1 To top1
cur2=cur
Do While cur2 > bot1 'bubble up
If (ary1(cur2) > ary1(cur2-1)) Then
Exit Do
Else
'swap
tmp1=ary1(cur2)
tmp2=ary2(cur2)
ary1(cur2)=ary1(cur2-1)
ary2(cur2)=ary2(cur2-1)
ary1(cur2-1)=tmp1
ary2(cur2-1)=tmp2
End If
cur2=cur2-1
Loop
Next
End Sub

' A button action on a form with four multi-value text fields; Input_1,
Input_2, Output_1 and Output_2
' Enter several unsorted values in Input_1 and an identical number of values
in Input_2, and click the button.
' The 1st set of values will be sorted and placed into Output_1 and the 2nd
set will be placed into Output_2
' in the order they now correspond with their original counterparts from the
1st set.

Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim ui As NotesUIDocument
Dim doc As NotesDocument
Dim itm1, itm2 As NotesItem
Dim v1, v2 As Variant
Dim ary() As Variant
Set ui = ws.CurrentDocument
Set doc = ui.Document
Set itm1 = doc.GetFirstItem("Input_1")
Set itm2 = doc.GetFirstItem("Input_2")
ct%=0
v1 = itm1.Values
v2 = itm2.Values
Call Bubble_Sort2 (v1, v2)
doc.Output_1 = v1
doc.Output_2 = v2
End Sub

This was first published in November 2000

Dig Deeper

0 comments

Oldest 

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

-ADS BY GOOGLE

SearchWindowsServer

Search400

  • iSeries tutorials

    Search400.com's tutorials provide in-depth information on the iSeries. Our iSeries tutorials address areas you need to know about...

  • V6R1 upgrade planning checklist

    When upgrading to V6R1, make sure your software will be supported, your programs will function and the correct PTFs have been ...

  • Connecting multiple iSeries systems through DDM

    Working with databases over multiple iSeries systems can be simple when remotely connecting logical partitions with distributed ...

SearchEnterpriseLinux

SearchDataCenter

SearchExchange

SearchContentManagement

Close