到现在为止,我还没有真正写过一篇关于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个随机数:
![](https://img-my.csdn.net/uploads/201302/19/1361237167_1525.png)
![](https://img-my.csdn.net/uploads/201302/19/1361237184_8513.png)
对于优酷视频上的那种算法,我表示想不出代码该怎样写....等待灵感吧...阿门......其实我觉得对于排序与生活是一样的,只要有一个思路,和一个目的,然后向着那个目的一步一步的靠近,最后肯定就会达到预期的结果。比如第一种算法,每次比较随然只选出一个数,但我把他放在最后,那么就离最后的结果进了一步,因为我们已经找到了最大的数,然后下次再找的时候这个最大的数就不需要再次进行循环比较,我们学习不是也是这个样子么?每天不需要进步太多,只需要一点儿点儿,但是一定是在向着我们最后的目的去的,那么最终我们一定会到达我们的目的,到达我们梦想的彼岸!
就这样吧,望多多包容指教。