鸭子tv国产极品在线观看_成人69视频在线播放_91精品免费在线观看_亚洲AT永久偷窥无码精品_国产精品自产拍在线观看涩浪潮久

江蘇省高校計(jì)算機(jī)等級(jí)考試命題研究院 江蘇省高校計(jì)算機(jī)等級(jí)考試輔導(dǎo)
江蘇省二級(jí)VB常用算法(六)排序

VB常用算法(六)排序

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

關(guān)鍵詞排序    算法                                          

1、算法說明

1)        選擇法排序

 

(1)     n個(gè)數(shù)中選出最小數(shù)的下標(biāo),出了循環(huán),將最小數(shù)與第一個(gè)數(shù)交換位置;

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

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

譬如:

                                            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為需要排序的數(shù)組,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     '進(jìn)行數(shù)組大小-1輪比較

        m = i                             

'在第i輪比較時(shí),假定第

                                           'i個(gè)元素為最值元素

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

                                           '值元素的下標(biāo)并記錄在m

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

                                           '下標(biāo),否則記錄最大元素下標(biāo)

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

            Else

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

            End If

        Next j                             '將最值元素與第i個(gè)元素交換

        temp = a(i)

        a(i) = a(m)

        a(m) = temp

    Next i

End Sub

 

調(diào)用該過程示例:

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)        冒泡法排序

選擇排序法在每一輪排序時(shí)找最值元素的下標(biāo),出了內(nèi)循環(huán)(一輪排序結(jié)束),再交換最小數(shù)的位置;而冒泡法在每一輪排序時(shí)將相鄰的數(shù)比較,當(dāng)次序不對(duì)就交換位置,出了內(nèi)循環(huán),最值數(shù)已經(jīng)冒出。

譬如:

                                    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為需要排序的數(shù)組,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     '進(jìn)行n-1輪比較

       

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

                                          

            If sheng Then                  '若次序不對(duì),馬上進(jìn)行交換

                                          

                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                             '出了內(nèi)循環(huán),一輪排序結(jié)束

                                           '最值元素冒到最上邊

    Next i

End Sub

 

調(diào)用該過程代碼基本同上。

 

2、實(shí)戰(zhàn)練習(xí)

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

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

 

                  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秋上機(jī)試卷04

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