1. <small id="kntrr"><delect id="kntrr"></delect></small>
    2. <sub id="kntrr"></sub>
        1. <form id="kntrr"><listing id="kntrr"></listing></form>
            江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
            江蘇省二級VB常用算法(六)排序

            VB常用算法(六)排序

            曹蘇群  http://caosuqun.bokee.com

            關鍵詞排序    算法                                          

            1、算法說明

            1)        選擇法排序

             

            (1)     n個數中選出最小數的下標,出了循環,將最小數與第一個數交換位置;

            (2)     除第一個數外,在剩下的n-1個數中再按方法(1)選出次小的數,與第二個數交換位置;

            (3)     以此類推,最后構成遞增序列。

            譬如:

                                                        8       6       9       3       2       7

            第一輪交換后             2       6       9       3       8       7

            第二輪交換后             2       3       9       6       8       7

            第三輪交換后             2       3       6       9       8       7

            第四輪交換后             2       3       6       7       8       9

            第五輪無交換             2       3       6       7       8       9

             

             

            程序代碼如下:

            Private Sub xzPaiXu(a() As Double, sheng As Boolean)

                'a為需要排序的數組,shengTrue則為升序排列,為False,則為降序排列。

                Dim i As Integer, j As Integer

                Dim temp As Double

                Dim m As Integer

                For i = LBound(a) To UBound(a) - 1     '進行數組大小-1輪比較

                    m = i                             

            '在第i輪比較時,假定第

                                                       'i個元素為最值元素

                    For j = i + 1 To UBound(a)         '在剩下的元素中找出最

                                                       '值元素的下標并記錄在m

                        If sheng Then                  '若為升序,則m記錄最小元素

                                                       '下標,否則記錄最大元素下標

                            If a(j) < a(m) Then m = j

                        Else

                            If a(j) > a(m) Then m = j

                        End If

                    Next j                             '將最值元素與第i個元素交換

                    temp = a(i)

                    a(i) = a(m)

                    a(m) = temp

                Next i

            End Sub

             

            調用該過程示例:

            Option Base 1

            Private Sub Command1_Click()

                Dim b(6) As Double

                b(1) = 8

                b(2) = 6

                b(3) = 9

                b(4) = 3

                b(5) = 2

                b(6) = 7

                Call xzPaiXu(b, True)

                For i% = 1 To 6

                    Print b(i)

                Next

            End Sub

             

            2)        冒泡法排序

            選擇排序法在每一輪排序時找最值元素的下標,出了內循環(一輪排序結束),再交換最小數的位置;而冒泡法在每一輪排序時將相鄰的數比較,當次序不對就交換位置,出了內循環,最值數已經冒出。

            譬如:

                                                8       6       9       3       2       7

            8  6  9  3  2  7

            8  6  9  2  3  7

            8  6  2  9  3  7

            8  2  6  9  3  7

            2  8  6  9  3  7

                                                ….

                                               2  3  8  6  9  7

                                               ….

                                               2  3  6  8  7  9

                                               ….

                                               2  3  6  7  8  9

            ….

            2  3  6  7  8  9

             

             

             

            程序代碼如下:

             

            Private Sub mpPaiXu(a() As Double, sheng As Boolean)

                'a為需要排序的數組,shengTrue則為升序排列,為False,則為降序排列。

                Dim i As Integer, j As Integer

                Dim temp As Double

                Dim m As Integer

                For i = LBound(a) To UBound(a) - 1     '進行n-1輪比較

                   

                    For j = UBound(a) To i + 1 Step -1 'ni個元素兩兩進行比較

                                                      

                        If sheng Then                  '若次序不對,馬上進行交換

                                                      

                            If a(j) < a(j - 1) Then

                                temp = a(j)

                                a(j) = a(j - 1)

                                a(j - 1) = temp

                            End If

                        Else

                            If a(j) > a(j - 1) Then

                                temp = a(j)

                                a(j) = a(j - 1)

                                a(j - 1) = temp

                            End If

                        End If

                    Next j                             '出了內循環,一輪排序結束

                                                       '最值元素冒到最上邊

                Next i

            End Sub

             

            調用該過程代碼基本同上。

             

            2、實戰練習

            1)        補充代碼(2003秋二(10))

                   下面是一個采用拉鋸式排序法對數組元素按升序進行排序的程序,所謂拉鋸式排序法是這一遍把最小的元素從下到上送到最上的位置,下一遍則是從上到下把最大的元素送到最下的位置。

             

                              Option Base 1

                              Private Sub Command1_Click()

                              Dim a(10) As Integer,i As Integer

                            For i = 1 To 10

                               a(i) = Int(Rnd * 10)+1

                               Text1 = Text1 & Str(a(i))

                            Next i

                            Call shaker_sort(a)

                            For i = 1 To 10

                               Text2 = Text2 & Str(a(i))

                            Next i

                              End Sub

             

                              Private Sub Shaker_sort(k() As Integer)

                              Dim i As Integer,c As Integer,d As Integer

                              Dim t As Integer

                              c = 1

                              d =     1  

                              Do

                                  For     2    Step-1

                                     If k(i=1)>k(i) Then

                                        t = k(i-1):k(i-1) = k(i):k(i) = t

                                     End If

                                  Next i

                                      3  

                                  For i = c+1 To d

                                     If     4   Then

                                        t = k(i-1):k(i-1) = k(i):k(i) = t

                                     End If

                                  Next i

                                  d = d-1

                              Loop While     5  

                              End Sub

             

            2)        編程題(2002秋上機試卷04

                     把文本框輸入的字符串按降序添加到列表框中。

            国产在线精品一区二区三区不卡_亚洲第一极品精品无码_永久免费无码网站在线观看_亚洲av综合日韩