排序问题

来源:互联网 发布:java sleep函数单位 编辑:程序博客网 时间:2024/05/17 02:21

 Enum SortOrder
        ''' <summary>
        ''' 上升排列,重元素下轻元素上
        ''' </summary>
        ''' <remarks></remarks>
        Ascending
        ''' <summary>
        ''' 下降排列,轻上重下
        ''' </summary>
        ''' <remarks></remarks>
        Descending
    End Enum


    Sub BubbleSort(ByVal array As Array, ByVal order As SortOrder)
        Dim Index As Integer = 0
        Dim NextElementIndex As Integer = 0
        Dim PElement As Integer = 0
        Dim CElement As Integer = 0
        Dim Size As Integer = array.Length - 1


        Do While NextElementIndex < Size
            Index = Size
            Do While Index > NextElementIndex
                PElement = array(Index - 1)
                CElement = array(Index)
                If order = SortOrder.Ascending Then
                    If CElement < PElement Then
                        array(Index) = PElement
                        array(Index - 1) = CElement
                    End If
                ElseIf order = SortOrder.Descending Then
                    If CElement >= PElement Then
                        array(Index) = PElement
                        array(Index - 1) = CElement
                    End If
                End If
                Index -= 1

            Loop
            NextElementIndex += 1
        Loop


        CElement = Nothing
        PElement = Nothing
    End Sub

 

    Private Sub BucketSort(ByVal array As Array, ByVal order As SortOrder)
        Dim Index As Integer = 0
        Dim NextElementIndex As Integer = 0
        Dim Bucket As Integer = 0
        Dim Size As Integer = array.Length

        NextElementIndex = 1
        Do While NextElementIndex <= Size - 1
            Bucket = array(NextElementIndex)
            Index = NextElementIndex
            Do While True
                If Index > 0 Then
                    If order = SortOrder.Ascending Then
                        If Bucket < array(Index - 1) Then
                            array(Index) = array(Index - 1)
                            Index -= 1
                        Else
                            Exit Do

                        End If
                    ElseIf order = SortOrder.Descending Then
                        If Bucket >= array(Index - 1) Then
                            array(Index) = array(Index - 1)
                            Index -= 1
                        Else
                            Exit Do
                        End If

                    End If
                Else
                    Exit Do
                End If
            Loop
            '每次比较得到大的元素到达合适位置
            array(Index) = Bucket
            NextElementIndex += 1
        Loop

    End Sub


    Sub SelectionSort(ByVal array As Array, ByVal order As SortOrder)
        Dim Index As Integer = 0
        Dim MinElementIndex As Integer = 0
        Dim NextElementIndex As Integer = 0
        Dim SwapVar As Integer = 0
        Dim Size As Integer = array.Length

        Do While NextElementIndex < Size - 1
            MinElementIndex = Size - 1
            Index = MinElementIndex - 1
            While Index >= NextElementIndex
                If order = SortOrder.Ascending Then
                    If array(Index) < array(MinElementIndex) Then
                        MinElementIndex = Index
                    End If
                ElseIf order = SortOrder.Descending Then
                    If array(Index) >= array(MinElementIndex) Then
                        MinElementIndex = Index
                    End If
                End If
                Index -= 1

            End While

            '交换元素
            SwapVar = array(MinElementIndex)
            array(MinElementIndex) = array(NextElementIndex)
            array(NextElementIndex) = SwapVar
            NextElementIndex += 1

        Loop


    End Sub

 

    Sub InsertionSort(ByVal array As Array, ByVal order As SortOrder)
        Dim Index As Integer
        Dim SwapVar As Integer
        Dim NextElementIndex As Integer
        Dim Size As Integer = array.Length

        '先比较2个元素大小,然后范围不断扩大
        NextElementIndex = 1
        While NextElementIndex <= Size - 1
            Index = NextElementIndex
            Do
                If Index > 0 Then
                    If order = SortOrder.Ascending Then
                        If array(Index) < array(Index - 1) Then
                            SwapVar = array(Index)
                            array(Index) = array(Index - 1)
                            array(Index - 1) = SwapVar
                            Index -= 1
                        Else
                            Exit Do
                        End If
                    ElseIf order = SortOrder.Descending Then
                        If array(Index) >= array(Index - 1) Then
                            SwapVar = array(Index)
                            array(Index) = array(Index - 1)
                            array(Index - 1) = SwapVar
                            Index -= 1
                        Else
                            Exit Do
                        End If
                    End If

                Else
                    Exit Do

                End If

            Loop
            NextElementIndex += 1
        End While


    End Sub

 

    Sub QuickSort(ByVal array As Array, ByVal firstIndex As Integer, ByVal lastIndex As Integer)
        Dim F, L As Integer, midPoint, Y As ValueType
        F = firstIndex
        L = lastIndex
        '得到分界值
        midPoint = array((firstIndex + lastIndex) / 2)
        While F <= L
            '分区
            While array(F) < midPoint AndAlso F < lastIndex
                F += 1
            End While
            While midPoint < array(L) AndAlso L > firstIndex
                L -= 1
            End While
            If F <= L Then
                Y = array(F)
                array(F) = array(L)
                array(L) = Y
                F += 1
                L -= 1
            End If
        End While
        If (firstIndex < L) Then Call QuickSort(array, firstIndex, L)
        If (F < lastIndex) Then Call QuickSort(array, F, lastIndex)
    End Sub

 

原创粉丝点击