[Year 12 SofDev] Binary search example?

BUCKNELL, Chris cbucknell at whitefriars.vic.edu.au
Wed Jun 15 15:38:08 EST 2011


Hi Trav,

Try this on for size, it is based on code from the book "Data Structures and Algorithms Using Visual Basic.NET" by Michael McMillan

Regards Chris


[cid:image001.png at 01CC2B72.39F67120]




Module Module1
    Const ARRAY_SIZE As Integer = 9 'i.e. 10 item can be stored in the array - VB.NET has zero indexed arrays
    Dim arr(ARRAY_SIZE) As Integer

    Sub Main()
        'Fill array with random numbers
        For index As Integer = 0 To ARRAY_SIZE
            arr(index) = (CInt(Int(100 * Rnd() + 1)))
        Next
        'Sort array
        SelectionSort()
        'Show sorted array
        showArray()

        'Find number 77 in array using standard Binary Search
        Dim position As Integer = binSearch(77)
        If (position > -1) Then
            Console.WriteLine("77 found at position " & position.ToString)
        Else
            Console.WriteLine("Not in the array.")
        End If

        'Find number 77 in array using standard Binary Search
        position = RecursiveBinSearch(77, 0, ARRAY_SIZE)
        If (position > -1) Then
            Console.WriteLine("77 found at position " & position.ToString)
        Else
            Console.WriteLine("Not in the array.")
        End If
        Console.Read()

    End Sub

    Public Function binSearch(ByVal value As Integer) As Integer
        Dim upperBound, lowerBound, mid As Integer
        upperBound = ARRAY_SIZE 'arr.GetUpperBound(0)
        lowerBound = 0
        While (lowerBound <= upperBound)
            mid = (upperBound + lowerBound) \ 2
            If (arr(mid) = value) Then
                Return mid
            ElseIf (value < arr(mid)) Then
                upperBound = mid - 1
            Else
                lowerBound = mid + 1
            End If
        End While
        Return -1
    End Function

    Public Function RecursiveBinSearch(ByVal value As Integer, ByVal lower As Integer, ByVal upper As Integer) As Integer
        If (lower > upper) Then
            Return -1
        Else
            Dim mid As Integer
            mid = (upper + lower) \ 2
            If (value < arr(mid)) Then
                RecursiveBinSearch(value, lower, mid - 1)
            ElseIf (value = arr(mid)) Then
                Return mid
            Else
                Return RecursiveBinSearch(value, mid + 1, upper)
            End If
        End If
    End Function

    Public Sub SelectionSort()
        Dim outer, inner, min, temp As Integer
        For outer = 0 To ARRAY_SIZE - 1
            min = outer
            For inner = outer + 1 To ARRAY_SIZE
                If (arr(inner) < arr(min)) Then
                    min = inner
                End If
            Next
            temp = arr(outer)
            arr(outer) = arr(min)
            arr(min) = temp
        Next
    End Sub

    Public Sub showArray()
        Dim index As Integer
        For index = 0 To ARRAY_SIZE
            Console.Write(arr(index) & " ")
        Next
        Console.WriteLine()
    End Sub

End Module


From: sofdev-bounces at edulists.com.au [mailto:sofdev-bounces at edulists.com.au] On Behalf Of Travis Parker
Sent: Wednesday, 15 June 2011 2:47 PM
To: Year 12 Software Development Teachers' Mailing List
Subject: [Year 12 SofDev] Binary search example?

Dear All,

I was just wondering if anyone has a VB program (Using dot net 2010) that uses a binary search? I would ideally like to give the class a simple program to demonstrate it in action, and rather than write one from scratch during the exam/reporting time - I'm sure one of my more learned colleagues would have one lying around!

Cheers

Trav


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.edulists.com.au/pipermail/sofdev/attachments/20110615/7e7b7740/attachment-0001.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 69035 bytes
Desc: image001.png
Url : http://www.edulists.com.au/pipermail/sofdev/attachments/20110615/7e7b7740/image001-0001.png 


More information about the sofdev mailing list