您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> VB >> 辅导 >> 正文    
  VB常用算法(六)排序 【注册男护士专用博客】          

VB常用算法(六)排序

www.nanhushi.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

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

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。