<samp id="uu9tx"></samp>
        <samp id="uu9tx"><tr id="uu9tx"><nav id="uu9tx"></nav></tr></samp>
        <delect id="uu9tx"><legend id="uu9tx"><meter id="uu9tx"></meter></legend></delect>
                <samp id="uu9tx"><tr id="uu9tx"><meter id="uu9tx"></meter></tr></samp><nav id="uu9tx"></nav>
                <samp id="uu9tx"></samp>
                  <samp id="uu9tx"><tr id="uu9tx"><meter id="uu9tx"></meter></tr></samp>
                  江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
                  江蘇省二級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

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

                  亚洲欧美日韩国产一区二区三区_全亚洲免费一级黄片_国产一区二区三区不卡视频手机版_国产污三级网站在线观看