概述
前言:最近正在研究vb的数组,正好数组这章涉及到了一点简单的排序。选择排序和冒泡排序,利用这两种排序方法。做一个把随机生成的10个数。按照从大到小排序,从小到大也可以。其实算法就是一个,解决问题的思想。如果类比到,数学里面的话。算法的抽象,就好比是函数y=f(x)。
目录
思想:
(一)选择排序
(二)冒泡排序
例子:
选择排序
对 1 8 7 5 9 2 4 3 0 进行从大到小排序
冒泡排序
效果图
思想:
(一)选择排序
就用这章的例子理解,先假设第一个元素里面的数是最大的。然后用第一个元素里面的数和后面的每一个元素里的数做对比,符合你的要求就把里面的数值进行交换,继续往后对比。按照从大到小排序,每轮对比完都会产生一个本轮最大的放到前面。
(二)冒泡排序
还是这章的例子为例,冒泡排序的思想:按照大数上浮,小数下沉。按照这句话可以理解,把大数和小数进行分离。还是用对比的思想,不过这次不是全局对比。而是局部的对比,每次都会用数组的前一个和后一个。进行两两对比,按照这种方式对比每轮都会产生一个本轮最小的放到后面。
例子:
选择排序
'通用
Dim a() '定义排序数组
Dim p As String '用于输出随机数
Dim yes, i, j, x, t As Integer '定义do 条件
'命令按钮单击事件
p = ""
For i = 1 To 9 '选择排序
For j = i + 1 To 10 '从第二个一次往后比较大小 a(j)是代表,a(i)数组的第几个元素
If a(i) < a(j) Then '如果a(i)的数组小于a(j)的数组,交换数组的值
t = a(i)
a(i) = a(j)
a(j) = t '赋值交换
End If
Next j
Next i
For i = 1 To 10
p = p & Str(a(i)) & "," 'str()将数值类型,转换为字符类型。
Next i
Label2.Caption = LTrim(Left(p, Len(p) - 1))
'窗体加载事件
Randomize '产生随机数源
p = ""
For i = 1 To 10 '产生随机数
Do
x = Int(Rnd * 91) + 10 '产生十个整数
yes = 0
For j = 1 To i - 1 '产生的数组元素不相同
If x = a(j) Then yes = 1: Exit For '如果 x等于a(j)则 yes的值改为1 是do 循环结束
Next j
Loop While yes = 1
a(i) = x '把a(j)值赋给a(i)数组
p = p & Str(a(i)) & ","
Next i
Label1.Caption = LTrim(Left(p, Len(p) - 1)) 'len得到字符串的长度,然后减1
'left(要截取的字符,截取字符长度)
Label2.Caption = "" 'ltrim去除空格
对 1 8 7 5 9 2 4 3 0 进行从大到小排序
'通用
Dim a() '定义排序数组
Dim p As String '用于输出随机数
Dim yes, i, j, x, t As Integer '定义do 条件
'命令按钮
For i = 0 To UBound(a) - 1 '对比几次
For j = i + 1 To UBound(a) '从第几个开始
If a(i) < a(j) Then
t = a(i)
a(i) = a(j)
a(j) = t
End If
Next j
Next i
Label2.Caption = Join(a) '输出排序结果 join函数是把数组,以字符串输出。
'窗体加载
a = Array(1, 8, 7, 5, 9, 2, 4, 3, 0) '给数组赋值
Label1.Caption = Join(a) 'Jonin 把一维数组元素,一字符串形式输出
冒泡排序
'通用
Dim a(1 To 10) As Integer '定义排序数组
Dim p As String '用于输出随机数
Dim yes, i, j, x, t As Integer '定义do 条件
'命令按钮
p = ""
For i = 1 To 9 '冒泡排序 进行九次对比
For j = 1 To 10 - i '每轮对比都产生一个最小的放到最后,然后下一轮从开始到n-i
If a(j) < a(j + 1) Then '用数组的前一个和后面的进行比较,每次都是两两比较。
t = a(j)
a(j) = a(j + 1)
a(j + 1) = t
End If
Next j
Next i
For i = 1 To 10 '数组赋值
p = p & Str(a(i)) & ","
Next i
Label2.Caption = LTrim(Left(p, Len(p) - 1))
'窗体加载
Randomize '产生随机数源
p = ""
For i = 1 To 10 '产生随机数
Do
x = Int(Rnd * 91) + 10 '产生十个整数
yes = 0
For j = 1 To i - 1 '产生的数组元素不相同
If x = a(j) Then yes = 1: Exit For '如果 x等于a(j)则 yes的值改为1 是do 循环
Next j
Loop While yes = 1
a(i) = x '把a(j)值赋给a(i)数组
p = p & Str(a(i)) & ","
Next i
Label1.Caption = LTrim(Left(p, Len(p) - 1)) 'len得到字符串的长度,然后减1
'left(要截取的字符,截取字符长度)
Label2.Caption = "" 'ltrim去除空格
效果图
最后
以上就是凶狠铃铛为你收集整理的数组---算法(选择,冒泡)排序的全部内容,希望文章能够帮你解决数组---算法(选择,冒泡)排序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复