VB之舞动青春--激扬排序

来源:互联网 发布:最好的我们网络剧下载 编辑:程序博客网 时间:2024/05/01 10:07

         到现在为止,我还没有真正写过一篇关于VB学习的博客,那么今天就来开个头吧。

         前两天米老师讲了关于VB中产生随机数的例子,而且让我们自己想一下关于对产生的10个数字进行从小到大的排序的问题。俗话说百看不如一练(不知有没有这句俗话睡觉),所以自己便根据网上的一些对排序的资料和视频加上自己的理解,写出了几种算法,拿来与大家分享。

         先看下代码吧:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Dim c As Integer
Dim t As Integer
Dim flag As Integer
Dim a(9)
Dim p As String
Private Sub Command1_Click()

'--------------产生10个随机不重复数字----------------

    Dim i As Integer
    p = ""       '清空变量p的值
   
    Randomize       '初始化随机数生成器
   
    Label1.Caption = ""        '清空标签框的内容
    a(0) = Int(100 * Rnd + 1)       '第一个数不需要比较

    For i = 1 To 9               '循环产生9个数字
        c = Int(100 * Rnd + 1)       '第二个数开始以后需要比较,则先进行比较
        flag = 1             '标志位,假设产生的数字没有重复
       
        For t = 0 To i - 1      '与前边产生的数字进行比较
            If c = a(t) Then
            i = i - 1          '如果重复,则废掉这个数,重新产生
            flag = 0         '标志位为假
            Exit For        '如果有重复,则退出循环
            End If
        Next t
       
        If flag = 1 Then
            a(i) = c            '如果没有重复,则将值赋给数组
        End If
    Next i
'---------------------------------------------------------
   
   
    For i = 0 To 9
        p = p & "  " & a(i)
    Next i
    Label1.Caption = p             '标签框显示数组的内容
End Sub

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------Private Sub Command2_Click()
    p = ""

    Dim j As Integer
    Dim i As Integer
    Dim temp As Integer
   
   
   
'----------------------------第一种算法-------------------
'---------------------------每次选最大--------------------
'   For i = 1 To 9                一共进行9次循环排序
'       For j = 0 To 9 - i
  '          If a(j) > a(j + 1) Then        每次循环排序选出一个最大值
   '         temp = a(j)
    '        a(j) = a(j + 1)
     '       a(j + 1) = temp
      '      End If
       ' Next j
'    Next i
'-------------------------------冒泡排序-------------------------------


'---------------------------------第二种算法-----------------------------
'---------------------------------每次选最小----------------------------
'    Dim min_index As Integer
'   For i = 0 To 8                循环9次排序,每次选出一个最小值放在最前
  '      min_index = i                假设该数为最小
   '     For j = i + 1 To 9         上一次循环选出的最小值不参与本次循环
    '        If a(j) < a(min_index) Then
     '           min_index = j        如果后边的数小,则将后者设置为最小
      '      End If
       '     If min_index <> i Then        如果最小不是最初假设的值
        '        temp = a(i)
         '       a(i) = a(min_index)
          '      a(min_index) = temp        将最小值放在本次循环的最前
           ' End If
            'min_index = i          重新赋值min_mindex的值
'        Next j
'   Next i
'-------------选择排序----------------


'-------------第三种算法--------------
'-------------插入排序----------------
'    For i = 1 To 9           一共进行9次循环比较
'       For j = 0 To i - 1         产生的第j个数与这个数前边的所有数比较
  '          If a(i) < a(j) Then         找到第j个数应该的位置
   '             temp = a(i)
    '            a(i) = a(j)
     '           a(j) = temp                  第j个数前的数已经排好
      '      End If
       ' Next j
'    Next i
   
'--------------------------------------


'---------------------第四种算法--------------------------

----------------------土豆视频法--------------------------

For i = 0 To 4                '第一次循环
    If a(i) > a(i + 5) Then        '相隔4位进行比较,小数放前
        temp = a(i)
        a(i) = a(i + 5)
        a(i + 5) = temp
    End If
Next i

For i = 3 To 9                '第二次循环
    If a(i) < a(i - 3) Then           '相隔2位进行比较,小数放前
        temp = a(i)
        a(i) = a(i - 3)
        a(i - 3) = temp
    End If
   
    If i > 5 Then             '第一次交换后,还需要与前一个相隔2位的数字比较
        If a(i - 3) < a(i - 6) Then        '小数放前
            temp = a(i - 3)
            a(i - 3) = a(i - 6)
            a(i - 6) = temp
        End If
    End If
       
Next i

For i = 0 To 8               '第三次循环
    If a(i) > a(i + 1) Then         '相邻的数字进行比较,小数放前
        temp = a(i)
        a(i) = a(i + 1)
        a(i + 1) = temp
        If i > 0 Then               '第二次交换
            If a(i) < a(i - 1) Then        '小的数字放前
                temp = a(i)
                a(i) = a(i - 1)
                a(i - 1) = temp
                If i > 1 Then         '第三次交换
                    If a(i - 1) < a(i - 2) Then      '小的数字放前
                        temp = a(i - 2)
                        a(i - 2) = a(i - 1)
                        a(i - 1) = temp
                    End If
                End If
            End If
        End If
    End If
Next i

'-------------------------------------------------

    For i = 0 To 9
        p = p & "  " & a(i)          '标签框显示排序后的数组
    Next i
   
    Label1.Caption = p
End Sub

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

       顺便附上两张最后的效果图:

       产生10个随机数:

        对随机产生的10个数字进行排序:

       对于优酷视频上的那种算法,我表示想不出代码该怎样写....等待灵感吧...阿门......其实我觉得对于排序与生活是一样的,只要有一个思路,和一个目的,然后向着那个目的一步一步的靠近,最后肯定就会达到预期的结果。比如第一种算法,每次比较随然只选出一个数,但我把他放在最后,那么就离最后的结果进了一步,因为我们已经找到了最大的数,然后下次再找的时候这个最大的数就不需要再次进行循环比较,我们学习不是也是这个样子么?每天不需要进步太多,只需要一点儿点儿,但是一定是在向着我们最后的目的去的,那么最终我们一定会到达我们的目的,到达我们梦想的彼岸!

       就这样吧,望多多包容指教。

原创粉丝点击