Solved

Sort the array

Posted on 2000-03-17
6
209 Views
Last Modified: 2010-05-02
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
Comment
Question by:JeffBag
  • 3
  • 2
6 Comments
 
LVL 14

Expert Comment

by:mcrider
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


Cheers!®©
0
 
LVL 9

Accepted Solution

by:
Ruchi earned 145 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

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

0
 

Author Comment

by:JeffBag
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
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 14

Expert Comment

by:mcrider
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

--------------------------------------------------------------------------------
The information in this article applies to:

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

For more information about downloading files from the Microsoft Software Library, please see the following article in the Microsoft Knowledge Base:


Q119591 : How to Obtain Microsoft Support Files from Online Services





MORE INFORMATION
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
 




Additional query words: 4.00 kbDSupport

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


Last Reviewed: June 8, 1999
) 1999 Microsoft Corporation. All rights reserved. Terms of Use.



0
 

Author Comment

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

Expert Comment

by:mcrider
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

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

Introduction I needed to skip over some file processing within a For...Next loop in some old production code and wished that VB (classic) had a statement that would drop down to the end of the current iteration, bypassing the statements that were c…
Have you ever wanted to restrict the users input in a textbox to numbers, and while doing that make sure that they can't 'cheat' by pasting in non-numeric text? Of course you can do that with code you write yourself but it's tedious and error-prone …
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now