# Sorting Arrays in Visual Basic

‘Array sorting’, are two words that would strike the fear of God into me when I was at college.   Sorting in general used to strike the fear of God into me as it is/was such a dry, uninspiring subject.   Modern programmers rarely have to worry about sorting algorithms, and nor should they; they’ve been done to death by folk far brighter than ourselves.  There’s scores of algorithms that mathematicians have devised for all sorts of reasons and, if you’re that way inclined, take a look at this Wikipedia page on the subject.  It’s a great cure for insomnia.   That said- this tutorial on sorting arrays in Visual Basic is a great means to revisit everything we’ve learnt so far.  We’ll be combining VariablesLoopsFunction & Subroutines  and Arrays  in one powerful tutorial.

There are a wide variety of routines for sorting, with different characteristics, and today we look at the Selection Sort algorithm.  This algorithm is relatively simple and performs reasonably well, especially with smaller datasets.  To sort an array in ascending order the Selection Sort algorithm is as follows:

To implement this in Visual Basic we can use the following Subroutine

```Private Sub SortArray(ByRef array() As Integer)

Dim i As Integer
Dim j As Integer
Dim minimum As Integer
Dim swapValue As Integer
Dim upperBound As Integer
Dim lowerBound As Integer

lowerBound = LBound(array)
upperBound = UBound(array)

For i = lowerBound To upperBound

minimum = i

For j = i + 1 To upperBound
'Search for the smallest remaining item in the array
If array(j) < array(minimum) Then
'A smaller value has been found, remember the position in the array
minimum = j
End If
Next j

If minimum <> i Then
'Swap array Values
swapValue = array(minimum)
array(minimum) = array(i)
array(i) = swapValue
End If

Next i
End Sub
```

Have a read of that code.  All of the concepts will be relatively familiar by now, but take a good look at how this routine implements the described algorithm.  Implementing code from a written description is an extremely important part of being a software developer; understanding other people’s code perhaps even more so.

Create a New Project called Sort Array.

Add a ListBox onto the Form called ListBoxSorted.

Paste this Sort routine into the Form

In the Form_Load event paste the following:

```Dim myArray(9) As Integer
Dim i As Integer

myArray(0) = 34
myArray(1) = 12
myArray(2) = 45
myArray(3) = 54
myArray(4) = 1
myArray(5) = 12
myArray(6) = 198
myArray(7) = 23
myArray(8) = 18
myArray(9) = 7

For i = LBound(myArray) To UBound(myArray)
Next

SortArray(myArray)

For i = LBound(myArray) To UBound(myArray)
Next
```

This code:

• Creates an array of 10 elements
• Adds random numbers to the elements
• Displays the unordered array in the ListBox
• Calls the SortArray routine
• Displays the sorted array

Run your code and you should see the numbers sorted in ascending order and listed in the ListBox.  Can you improve this routine?  Can you see any repetition?  How would you fix that?  Remember the DRY Principle? Could you also sort multi-dimensional arrays?  How?

Of course, you can do exactly what was described here by using the Array.Sort method but at this stage in your careers, understanding the fundamentals is absolutely key.

“Any fool can know. The point is to understand.”