1、 1 高三算法复习十三(排序算法程序实现) 冒泡排序的思想:冒泡排序是在一列数据中把较小的数据逐次向上推移的一种 排序技术。 冒泡排序代码: for i=1 to n-1n 为排序数据个数, 共需冒泡 n-1 趟,最多需交换 n*(n-1)/2 次 for j=1 to n-i if d(j) b(j - 1) Then t = a(j - 1): (2) : a(j) = t t = b(j - 1): b(j - 1) = b(j): b(j) = t End If Next j Next i For i = 1 To 10 List2.AddItem Str(a(i) + “ “ + S
2、tr(b(i) Next i End Sub 程序中(1)划线处应填入_ 程序中(2)划线处应填入_ 2、 某协会进行钓鱼比赛, 最后有十人进入决赛, 录入员编制了如下Visual Basic 程序,功能是根据成绩进行排序,程序中数组a保存所有参赛者的成绩,数组b 保存此成绩对应的姓名,第i位参赛者的成绩保存在a(i)中,姓名保存在b(i) 中。 程序界面如图所示,左边列表框List1中显示原始数据(成绩和相应的姓名), 单击 “排序“按钮(Command1),排序后的结果按成绩从高到低显示在列表框 List2中。 解决此问题的算法流程图如图所示,排序部分的程序段如下: Dim a(1 To
3、10) As Single Dim b(1 To 10) As String Private Sub Command1_Click() 3 Dim i As Integer, j As Integer, k As Integer, x As Single, y As String For i = 1 To 9 k = i For j = i + 1 To 10 If Then k = j Next j If k i Then x = a(i): a(i) = a(k): y = b(i): b(i) = b(k): b(k) = y End If Next i For i = 1 To 10
4、List2.AddItem Str(a(i) + “ “ + b(i) Next i End Sub Private Sub Form_Load() 此过程用于对数组a和数组b进行初始赋值,代码略 End Sub (1)解决此问题的算法是_。(选填:冒泡排序 或 选择排序) 在程序和划线处,填入适当的语句或表达式,把程序补充完整: (2)程序中划线处应填入_。 (3)程序中划线处应填入_。 3、陈晓峰和同学们去农科院开展研究性学习,大家都收获很大,晓峰设计了一 个Visual Basic程序,他把同学们收集到的水稻亩产量和同学姓名已分别保存 在数组a和数组b中, 第i个同学收集的亩产量保存在a
5、(i)中, 对应的同学姓名保 存在b(i)中,最后按亩产量从高到低进行排序。 程序界面如图所示,左边列表框List1中显示的是所有同学收集到的原始数据, 单击“排序“按钮(Command1)后,在右边的列表框List2中显示排序完成后的结 果(按亩产量从高到低排列)。 4 解决此问题的算法流程图如图所示,相应的排序部分程序如下: Dim a(1 To n) As Single Dim b(1 To n) As String Private Sub Command1_Click() Dim i As Integer, j As Integer, c As Single, t As String
6、For i = 1 To n 设共有n名同学 For j = n To i + 1 If Then c = a(j - 1) a(j - 1) = a(j) a(j) = c t = b(j - 1) b(j - 1) = b(j) b(j) = t End If Next j Next i For i = 1 To n List2.AddItem Str(a(i) + “ “ + b(i) Next i End Sub Private Sub Form_Load() 此过程用于对数组a和数组b进行初始赋值,代码略 End Sub (1) 解决此问题的算法是_。 (选填: 选择排序 或 冒泡排
7、序) 在程序和划线处填入适当的语句或表达式,将程序补充完整: (2)程序中划线处应填入_。 (3)程序中划线处应填入_。 5 4、 学校“电脑周“活动已经结束, 林敏在班里举行了一个“我最关注的竞赛项目“ 的投票活动,她设计了一个Visual Basic程序,把所有同学的投票情况输入到 电脑里, 先将各项目得票数和项目名分别保存在数组a和数组b中, 第i个项目的 得票数保存在a(i)中,对应的项目名保存在b(i)中。 程序界面如图所示,左边列表框List1中显示同学评选的原始数据,单击“得票 统计“按钮(Command1),所有得票数从高到低显示在列表框List2中。 解决此问题的算法流程图如
8、图所示,排序部分的程序段如下: Dim a(1 To n) As Single Dim b(1 To n) As String Private Sub Command1_Click() Dim i As Integer, j As Integer, k As Integer, x As Single, y As String For i = 1 To n-1 假设共有n个竞赛项 目 k = i For j = i + 1 To n If a(k) a(j) Then Next j If k i Then x = a(i) a(i) = a(k) a(k) = x y = b(i) b(i) =
9、 b(k) b(k) = y Next i 6 For i = 1 To n List2.AddItem Str(a(i) + “ “ + b(i) Next i End Sub Private Sub Form_Load() 此过程用于对数组a和数组b进行初始赋值,代码略 End Sub (1)解决此问题用的算法是_。 (选填:选择排序 或 冒 泡排序) 在程序和划线处,填入适当的语句或表达式,把程序补充完整: (2)程序中划线处应填入_。 (3)程序中划线处应填入_。 5、2010 年冬奥会开幕式中各代表团的入场顺序是:希腊排在第一位,东道主 加拿大排在最后一位, 其余 80 个代表团入场
10、顺序按国家或地区名称依次 排列。下列 VB 程序实现如下功能:单击命令按钮 Command1 后,在列表 框 List1 中按入场顺序显示所有代表团的名称。请回答下列问题: (1)虚线框内程序段所用的排序算法的名称是 (2)在划线出填入合适的代码。 Dim a(0 To 81) As String Dim n As Integer Private Sub Form_Load() 用于将 82 个参赛代表团名称放入数组 a 中 n = 80 a(0) = “Greece“ a(n + 1) = “Canada“ 另外 80 个代表团名称放在 a(1)至 a(80)中,代码略 End Sub Pr
11、ivate Sub Command1_Click() Dim s As Dim i As Integer, j As Integer, k As Integer For i = 1 To n - 1 k = i For j = i + 1 To n If a(j) a(j) Then k = j End If Next j If k i Then End If Next i For k = 1 To n List2.AddItem a(k) Next End Sub Private Sub Command3_Click() List1.Clear List2.Clear End Sub Private Sub Form_Load() n = 10 End Sub (1)该程序有 个模块。 (2)该程序采用的算法是 。(填“冒泡程序”/“选择排 序”)。 (3)如果产生的10个随机数如第57图中的序列所示,那单击“排序”按钮 (Command2)后,数组变量a(3)的值是 。