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

计算机考试二级VB常用算法(6):排序

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为需要排序的数组,sheng为True则为升序排列,为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为需要排序的数组,sheng为True则为升序排列,为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 '从n到i个元素两两进行比较
                                          
            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分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。