试题

试题 试卷

logo

题型:综合题 题类:常考题 难易度:困难

浙江省高中信息技术 其他排序算法练习

某公司面试程序题如下:公司有10000名员工,请设计一个算法对该公司员工的年龄做递增排序输出。小刘设计了一个算法:利用数组b记录每个数据出现的次数,数组b下标范围为年龄范围,然后根据每个年龄值的个数进行排序。

例如,有如下年龄存在数组a中:

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

a(8)

a(9)

a(10)

20

19

18

19

15

12

15

20

17

19

利用一个数组b(b(10 To 20))记录每个数出现的次数:

b(10)

b(11)

b(12)

b(13)

b(14)

b(15)

b(16)

b(17)

b(18)

b(19)

b(20)

0

0

1

0

0

2

0

1

1

3

2

根据数组b对数组a进行排序:

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

a(8)

a(9)

a(10)

12

15

15

17

18

19

19

19

20

20

Dim a(10000) As Integer      ‘存放读入的年龄数据

Dim b(100) As Integer      ‘存放各个年龄出现的个数

Private Sub Command1_Click()

‘从数据库读入年龄数据放入数组a中

End Sub

Private Sub Command2_Click()

 For i = 1 To 100

 b(i) = 0

 Next i

 For i = 1 To 10000      ‘统计每个年龄数据的个数

    ①    

 Next i

 End Sub

Private Sub Command3_Click()

 j = 0

 For i = 1 To 100

  If b(i) <> 0 Then

   Do While b(i) <> 0

      ②       

    a(j) = i

     ‘③

  Loop

 End If

Next i

 For i = 1 To 10000

 List2.AddItem Str(a(i))

Next i

End Sub

(1)、为实现程序功能,请在划线①②处填入合适的代码。

①处填入的代码为

②处填入的代码为

(2)、加框处③代码有错,请修正。

③处的代码修改为

举一反三
二叉树是每个结点最多有两个子树的树结构,如值为9的结点有两个子树6和8,值为6的结点有两个子树5和3。若设二叉树的深度为h,则除第h层外,其它各层(1~h-1)的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。现要构造大根堆,堆是一棵顺序存储的完全二叉树,大根堆又是一种特殊的堆,它的特征是每个双亲结点的值都不小于其孩子结点的值。如下图所示,值为9的结点是6和8的双亲结点,而6和8分别是9的左孩子和右孩子;同理,6是5和3的双亲结点,而5和3分别是6的左孩子和右孩子……

假如我们用数组表示上述大根堆:

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

a(8)

a(9)

9

6

8

5

3

4

7

2

1

现有一算法把一个无序数组改造成大根堆。例如:我们在上图的大根堆中再增加一个值为8的新元素,如下图所示。

数组存储为:

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

a(8)

a(9)

a(10)

6

8

5

3

4

7

2

1

8

具体操作方法如下:

第一步:因为a(10)大于它的双亲结点a(5),故需交换a(10)和a(5)的值;

数组存储为:

第二步:因为a(5)大于它的双亲结点a(2),故需交换a(5)和a(2)(t)值;

数组存储为:

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

a(8)

a(9)

a(10)

9

8

8

5

6

4

7

2

1

3

第3步:因为a(2)不大于它的双亲结点a(1),故无需做交换操作。此时新元素已经放到了正确的位置,新的大根堆构造完成,上移行动结束。

返回首页

试题篮