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
This Content Component encountered an error



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:




  • 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 ...