<source id="v77gz"></source>
    <u id="v77gz"><p id="v77gz"></p></u>

      <samp id="v77gz"></samp>

      <var id="v77gz"><td id="v77gz"><ins id="v77gz"></ins></td></var>

      <video id="v77gz"></video>
      <source id="v77gz"></source>
    1. 江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
      江蘇省二級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

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

      中文在线字幕第一页_中文字幕高跟丝袜作品番号_亚洲中文无无码第_日本亚洲欧美国产日韩a??y_在线观看亚洲av无码专区