选择法排序 vb.net

时间:2024-05-02 11:34:38

Imports System.Threading

Module Module1

    Sub Main()

        'test code
        'Dim a, b As Integer
        'a = 3
        'b = 4
        'Exchange(a, b)
        'Console.WriteLine("a=" & a & ", b=" & b)

        Dim int_array(19) As Integer
        Dim maxValIndex As Integer
        Dim startIdx As Integer  '开始位置
        Dim rnd As New Random

        Console.WriteLine("原始数组:")
        '填充数组元素
        For i As Integer = 0 To int_array.Length - 1
            int_array(i) = rnd.Next(0, 500)
            Console.Write(int_array(i) & ", ")
            Thread.Sleep(150)
        Next

        '选择法排序(降序)
        startIdx = 0 '默认从第一个元素开始比较
        Do
            maxValIndex = startIdx '默认第一个元素最大
            maxValIndex = GetMaxValIdx(int_array, maxValIndex, startIdx)  '求数组中最大值得下标

            If (maxValIndex <> startIdx) Then
                Exchange(int_array(maxValIndex), int_array(startIdx))
            End If
            startIdx += 1
        Loop While (startIdx < int_array.Length - 1)

        Console.WriteLine(vbCrLf & "排序之后:")
        For i As Integer = 0 To int_array.Length - 1
            Console.Write(int_array(i) & ", ")
        Next i

        Console.ReadKey()
    End Sub

    '求数组中最大值得下标,递归函数
    Public Function GetMaxValIdx(ByVal array() As Integer, ByVal maxValIdx As Integer, ByVal startIdx As Integer) As Integer
        For i As Integer = startIdx To array.Length - 1
            If (i <> maxValIdx) Then
                If array(i) > array(maxValIdx) Then
                    Return GetMaxValIdx(array, i, startIdx)
                End If
            End If
        Next

        Return maxValIdx
    End Function

    '交换值
    Public Sub Exchange(ByRef val1 As Integer, ByRef val2 As Integer)
        Dim temp As Integer
        temp = val1
        val1 = val2
        val2 = temp
    End Sub

End Module