Tip

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

There are Comments. Add yours.

 
TIP: Want to include a code block in your comment? Use <pre> or <code> tags around the desired text. Ex: <code>insert code</code>

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy
Sort by: OldestNewest

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:

Disclaimer: Our Tips Exchange is a forum for you to share technical advice and expertise with your peers and to learn from other enterprise IT professionals. TechTarget provides the infrastructure to facilitate this sharing of information. However, we cannot guarantee the accuracy or validity of the material submitted. You agree that your use of the Ask The Expert services and your reliance on any questions, answers, information or other materials received through this Web site is at your own risk.