Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
Solved

# Sort the array

Posted on 2000-03-17
Medium Priority
221 Views
Suppose I have a numerical array that contains 5 values
{45,23,100,54,12}. I want to sort the array in ascending order by using Bubble Sort. It should sort the array {12, 23, 45, 54, 100}
0
Question by:JeffBag
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 3
• 2

LVL 14

Expert Comment

ID: 2629701
This function will do that:

Sub NumericArraySort(InArray As Variant)
'THIS FUNCTION SORTS AN NUMERIC ARRAY
Dim lLoop1 As Long
Dim lLoop2 As Long
Dim tBuf As String
For lLoop1 = UBound(InArray) To LBound(InArray) Step -1
For lLoop2 = LBound(InArray) + 1 To lLoop1
If InArray(lLoop2 - 1) > InArray(lLoop2) Then
tBuf = InArray(lLoop2 - 1)
InArray(lLoop2 - 1) = InArray(lLoop2)
InArray(lLoop2) = tBuf
End If
Next lLoop2
Next lLoop1
End Sub

Call it like this:

Dim x(5) As Integer
x(0) = 11
x(1) = 1
x(2) = 15
x(3) = 120
x(4) = 10
x(5) = 4
NumericArraySort x
For i = 0 To 5
Debug.Print x(i)
Next i

0

LVL 9

Accepted Solution

Ruchi earned 580 total points
ID: 2629706
'I posted the comments to the similar question a few weeks ago....

'Put a command button on the form.

Option Explicit
Dim marray(5) As Integer

Public Sub BubbleSort(theArray() As Integer)
Dim pass As Integer, compare As Integer
Dim hold As String

For pass = 1 To (UBound(theArray) - 1)

For compare = 1 To (UBound(theArray) - 1)

If theArray(compare) > theArray(compare + 1) Then
hold = theArray(compare)
theArray(compare) = theArray(compare + 1)
theArray(compare + 1) = hold
End If

Next compare

Next pass

End Sub

Private Sub Command1_Click()
Dim x As Integer

Call BubbleSort(marray) ' Sort the array

For x = 1 To UBound(marray)
MsgBox marray(x)
Next x
End Sub

marray(1) = 45
marray(2) = 23
marray(3) = 100
marray(4) = 54
marray(5) = 12
End Sub

0

Author Comment

ID: 2629893
I am confused with Mcrider's answer. I took a note from my professor. His method for Bubble Sort is.

If Arr(X) > Arr(X + 1) Then
Temp = Arr(X)
Arr(X) = Arr(X + 1)
Arr(X + 1) = Temp
End If

I have to reject Mcrider's answer.

I ran Ruchi's code and it worked perfectly.
0

LVL 14

Expert Comment

ID: 2629937
I beg to differ... Please read the following KB article from microsoft.  The bublesort code is THE SAME code I provided... THE ONLY DIFFERENCE IS THE VARIABLE NAMES!

SAMPLE: Sorting Algorithms for Numeric Arrays

--------------------------------------------------------------------------------

Microsoft Visual Basic Standard, Professional, and Enterprise Editions, 16-bit and 32-bit, for Windows, version 4.0

--------------------------------------------------------------------------------

SUMMARY
Sorted.exe is a sample that demonstrates how to sort algorithms for numeric arrays. This article describes the three methods of sorting a series of numbers in a code and provides sample code showing how to implement them.

The following file is available for download from the Microsoft Software Library:

~ Sorted.exe

Q119591 : How to Obtain Microsoft Support Files from Online Services

It is often necessary to sort a series of numbers in code and there are various sorting algorithms available to do this.

The three methods discussed are:

Bubble sort.

Selection sort.

Shell sort.

Each routine simply receives an array full of numbers within the bounds of a LONG datatype, although this could be easily changed for different numeric datatypes. Note that the sort routines return the result of the sort operation in the array passed to the routine. Therefore, if you do not want the original array to be modified, copy the array to a variant, as shown in the example below, and then pass the variant to the relevant procedure.

Step-by-Step Example
Start a new project. Form1 is created by default.

Place a Command Button on the form.

Add the following code to the Form1 code window:
Option Explicit

sub Command1_Click()
Dim lMyArray(0 TO 9) As Long
Dim vTemp1 As Variant
Dim vTemp2 As Variant
Dim vTemp3 As Variant
Dim iLoop As Integer
Randomize
For iLoop = LBound(lMyArray) To UBound(lMyArray)
lMyArray(iLoop) = Int(Rnd * 100) + 1
Next iLoop
vTemp1 = lMyArray
vTemp2 = lMyArray
vTemp3 = lMyArray
Call BubbleSortNumbers(vTemp1)
Call SelectionSortNumbers(vTemp2)
Call ShellSortNumbers(vTemp3)
end sub

Sub BubbleSortNumbers(iArray As Variant)
Dim lLoop1 As Long
Dim lLoop2 As Long
Dim lTemp As Long
For lLoop1 = UBound(iArray) To LBound(iArray) Step -1
For lLoop2 = LBound(iArray) + 1 To lLoop1
If iArray(lLoop2 - 1) > iArray(lLoop2) Then
lTemp = iArray(lLoop2 - 1)
iArray(lLoop2 - 1) = iArray(lLoop2)
iArray(lLoop2) = lTemp
End If
Next lLoop2
Next lLoop1
End Sub

Sub SelectionSortNumbers(vArray As Variant)
Dim lLoop1 As Long
Dim lLoop2 As Long
Dim lMin As Long
Dim lTemp As Long
For lLoop1 = LBound(vArray) To UBound(vArray) - 1
lMin = lLoop1
For lLoop2 = lLoop1 + 1 To UBound(vArray)
If vArray(lLoop2) < vArray(lMin) Then lMin = lLoop2
Next lLoop2
lTemp = vArray(lMin)
vArray(lMin) = vArray(lLoop1)
vArray(lLoop1) = lTemp
Next lLoop1
End Sub

Sub ShellSortNumbers(vArray As Variant)
Dim lLoop1 As Long
Dim lHold As Long
Dim lHValue As Long
Dim lTemp As Long
lHValue = LBound(vArray)
Do
lHValue = 3 * lHValue + 1
Loop Until lHValue > UBound(vArray)
Do
lHValue = lHValue / 3
For lLoop1 = lHValue + LBound(vArray) To UBound(vArray)
lTemp = vArray(lLoop1)
lHold = lLoop1
Do While vArray(lHold - lHValue) > lTemp
vArray(lHold) = vArray(lHold - lHValue)
lHold = lHold - lHValue
If lHold < lHValue Then Exit Do
Loop
vArray(lHold) = lTemp
Next lLoop1
Loop Until lHValue = LBound(vArray)
End Sub

Keywords          : kbsample kbVBp400 VB4WIN
Version           : 4.00 | 4.00
Platform          : NT WINDOWS
Issue type        :

Last Reviewed: June 8, 1999

0

Author Comment

ID: 2629979
I read the KB article and now I understand. How do I award you the 60 points?
0

LVL 14

Expert Comment

ID: 2630053
The only way to do so is to open a new question with the title "FOR MCRIDER ONLY" and apply the points there...
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article describes some techniques which will make your VBA or Visual Basic Classic code easier to understand and maintain, whether by you, your replacement, or another Experts-Exchange expert.
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
###### Suggested Courses
Course of the Month5 days, 1 hour left to enroll