VB常用算法——排序.docx

上传人:doc321 文档编号:14979501 上传时间:2022-02-28 格式:DOCX 页数:6 大小:130.50KB
返回 下载 相关 举报
VB常用算法——排序.docx_第1页
第1页 / 共6页
VB常用算法——排序.docx_第2页
第2页 / 共6页
VB常用算法——排序.docx_第3页
第3页 / 共6页
VB常用算法——排序.docx_第4页
第4页 / 共6页
VB常用算法——排序.docx_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《VB常用算法——排序.docx》由会员分享,可在线阅读,更多相关《VB常用算法——排序.docx(6页珍藏版)》请在三一文库上搜索。

1、VB常考算法(八)排序:1、算法1)选择法排序算法说明:根据上例中求最小值的思路,我们可以使用如下方法进行从小到大排序:第一轮,以第一个元素逐个跟后面的所有元素比较,如果比后面的元素大就进行交换,经过一轮比较,第一个元素被确定为最小;同样的方法,下一轮以第二个元素跟剩下的所有元素进行比较确定下次小的元素;以此类推下面我们以图形的形式体现对5个数进行选择排序的过程:16425最小值62415264152641516425第一轮:第二轮:16425146251264512645次小值1246512456126451246512465第三轮:第四轮:从上图可以发现对5个元素进行排序,总共经过了5-1

2、=4轮,而每一轮中比较的次数也不相同,第一轮2、3、4、5号元素参与跟1号元素的比较,共4次,第二轮3、4、5号元素参与跟2号元素的比较,共3次,以次类推,比较次数逐步减少。经过四轮的比较,利用逐步求最小值的方法将5个数从小到大排好序。对于这样一个排序的过程,我们可以使用两个循环分别控制比较的轮数和每一轮的次数。程序代码:Private Sub Command1_Click() Dim n As Integer n = InputBox(请输入数组元素的个数:) Dim a() As Integer, i As Integer, j As Integer Print 排序前: ReDim a(

3、n) For i = 1 To n a(i) = Int(Rnd * (99 - 10 + 1) + 10) Print a(i); Next i For i = 1 To n - 1 For j = i To n If a(i) a(j) Then temp = a(i) 交换元素 a(i) = a(j) a(j) = temp End If Next j Next i Print Print 排序后: For i = 1 To n Print a(i); Next iEnd Sub2)冒泡法排序算法说明:相邻的元素进行比较,如果前面的元素比后面的元素大,则将它们进行交换,具体思路:设在数组

4、a中存放n个元素,第一轮,将a(1)和a(2)进行比较,若a(1)a(2),则交换这两个元素的值,然后继续用a(2)和a(3)比较,若a(1)a(2),则交换这两个元素的值,以此类推,直到a(n-1)和a(n)进行比较处理后,a(n)中就存放了n个数中最大的值;第二轮,用a(1)与a(2),a(2)与a(3),a(n-2)与a(n-1)进行比较,处理方法相同,这一轮下来,a(n-1)中存放n个数中第二大的值;第n-1轮,a(1)与a(2)进行比较处理,确保最小值在a(1)中。经过n-1轮比较处理,n个数已经按从小到大的顺序排列好。下面我们以图形的形式体现对5个数进行冒泡排序的过程:第一轮:62

5、415264152461524165最大值24156第二轮:24156241562145621456第三轮:第四轮:1245612456214561245612456程序代码:Private Sub Command1_Click() Dim n As Integer n = InputBox(请输入数组元素的个数:) Dim a() As Integer, i As Integer, j As Integer Print 排序前: ReDim a(n) For i = 1 To n a(i) = Int(Rnd * (99 - 10 + 1) + 10) Print a(i); Next i

6、For i = 1 To n - 1 For j = 1 To n - 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 Print Print 排序后: For i = 1 To n Print a(i); Next iEnd Sub2、实战练习1)填程序一算法说明:C盘根目录下的数据文件data.txt中有两组数据,第一组数据未排序,并以-1表示该组数据结束;第二组数据按从小到大顺序排列。下面程序的功能是,单击“读入数据”按钮,将文件中的两组数据,分

7、别读入到A、B数组中,单击“插入排序”按钮,则把A数组的元素按其大小依次插入到B数组的适当位置,使得B数组中元素仍为从小到大排列。完善程序,实现以上功能。Dim a() As Integer, b() As IntegerPrivate Sub command1_click() Dim I As Integer, j As Integer, n As Integer, s As String (1) 参考答案:Open c:data.txt For Input As #11 Do Input #11, n If n = -1 Then Exit Do I = I + 1 ReDim Prese

8、rve a(I) a(I) = n s = s & Str(a(I) Loop Text1 = s s = (2) 参考答案:Do While Not EOF(1) j = j + 1 ReDim Preserve b(j) Input #11, b(j) s = s & Str(b(j) Loop Text2 = s Close 11End SubPrivate Sub command2_click() Dim I As Integer, j As Integer, s As String For I = 1 To UBound(a) If a(I) b(UBound(b) Then (3)

9、 参考答案:ReDim Preserve b(UBound(b) + 1) b(UBound(b) = a(I) Else For j = 2 To bound(b) If (a(I) b(j - 1) And a(I) = b(j) Then Call change(a(I), j) Next j End If Next I For I = 1 To UBound(b) s = s & Str(b(I) Next I Text3 = sEnd SubPrivate Sub change(n As Integer, k As Integer) Dim I As Integer ReDim Pr

10、eserve b(UBound(b) + 1) For I = UBound(b) To k + 1 Step -1 (4) 参考答案:b(I) = b(I - 1) Next I (5) 参考答案:b(k) = nEnd Sub2)填程序二Option Base 1Dim n%, tag_in%Dim stud(1 To 10) As StudTypeType StudType Num As String * 6 学号 Name As String * 8 姓名 Average As Single 平均分End TypePrivate Sub Command1_Click() If n stud(j). (4) Then t = stud(k) stud(k) = (5) stud(j) = t End If Next k Next j For j = 1 To n Picture1.Print stud(j).Num; stud(j).Name; stud(j).Average Next jEnd Sub

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1