内容正文:
索引排序(链表)
1、(2020年11月金华十校15)凯凯学习了桶排序和冒泡排序,他发现桶排序占空间比较多而冒泡排序的效率又较低,于是他想到综合两个算法来对数据进行排序。
凯凯对n个由二位数组成的数据进行排序,排序步骤如下:
(1)以每个数的十位数来区分,放置到各个桶里(如第15题图①);
(2)分别对每个桶中的数据进行冒泡排序(如第15题图②);
(3)最后依次输出各个桶中的数据即可(如第15题图③)。
2、(2020年金丽衢十二校15)随机产生n个三位数,并对这些数进行索引排序。从文本框Text1中输入n的值,在列表List1中输出原始数据,列表框List2中输出升序排序结果。例如,原始数据140,472,876,811,436,965,884,150数据关系如下表所示:
原始数组a(i)
140
472
876
811
436
965
884
150
初始化索引数组index(i)
1
2
3
4
5
6
7
8
排序后的索引数组index(i)
1
4
6
5
3
8
7
2
排序后结果
140
150
436
472
811
876
884
965
(1)实现上述功能的VB程序如下,运行结果如图所示,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim i As Integer, j As Integer, n As Integer
Dim a(1 To 100), index(1 To 100) As Integer, b(1 To 100) As Integer
n = Val(Text1.Text)
List1.Clear: List2.Clear
For i = 1 To n
①
List1.AddItem Str(a(i))
Next i
'索引排序
For i = 1 To nindex(i) = i
For j = 1 To i - 1
If a(i) < a(j) Then index(i) = index(i) - 1: ②
Next j
Next i
For i = 1 To n
③
Next i
For i = 1 To n
List2.AddItem Str(b(i))
Next i
End Sub index(i)=1
For j=1 to n
If a(i)>a(j) then index(i)=index(i)+1
Next j
(2)加框处代码改为 能否实现排序?_______(填:能/不能)
3、(宁波十校)小明编写了一个VB程序对成绩数据进行排序。为保证相同分数的同学相对位置(指原数据中的前后关系)不发生改变,他试着采用一种新的排序算法来解决。为便于描述算法的实现过程,假定有如下数组a:
第一步:统计数组a中每个值a(i)出现的次数,存入b(a(i)),统计完成后数组b的情况如下:
第二步:从前向后,依次使数组b中的每个值等于其与前一项之和,这样数组b(a(i))就代表了数组a中小于或等于a(i)的元素个数,完成第二步后数组b如下:
第三步:从后往前,依次将数组a中元素填入数组c中,将数组元素a(i)放在数组c的第b(a(i))项,如元素a(1)=5,应该放在数组c的b(5)位(即c(5))。每放一个元素就将b(a(i))递减;完成第三步后,数组c如下所示,已经完成升序排序,且相对位置不变,即原来a(2)的值3仍然在a(3)的值3前面。
程序运行界面如右图所示:
实现上述功能的VB程序如下,回答以下问题:
(1)从代码中可以得知,用于连接数据库
的对象名是:
(2)请在划线处填上相应代码。
Dim a(1To 50)As Integer’存放学生的成绩
Dim sname(1To 50)As String’存放学生姓名
Dim n As Integer
Private Sub Command1_Click()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
conn.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+
App.Path+"\stu.accdb"
conn.Open
strSQL="SELECT*F