‘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 Variables, Loops, Function & 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 ListBoxSorted.Items.Add("Unordered Array") For i = LBound(myArray) To UBound(myArray) ListBoxSorted.Items.Add(myArray(i)) Next SortArray(myArray) ListBoxSorted.Items.Add("") ListBoxSorted.Items.Add("Ordered Array") For i = LBound(myArray) To UBound(myArray) ListBoxSorted.Items.Add(myArray(i)) Next
- 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.”