精通cobol--9.8.1 可用于二分查找的表的特征

  不同于顺序查找方式,二分查找方式对表中数据的位置有着严格的要求。表中数据的排列必须有序,可以为升序,也可以为降序。

下面,以学生成绩管理系统为例,提取简化模型,定义表的结构如下。

01  STUDENT-REPORT-TABLE.

05   REPORT   OCCURS  8  TIMES.                                    /*设共有8门课的成绩*/

          10   SUBJECT-CODE          PIC 9                       /*课程编号*/

10   SUBJECT-NAME          PIC X(10).                  /*课程名称*/

10   MARK                    PIC 99.                  /*分数*/

对应于以上定义的表,显然SUBJECT-CODE应作为数据编号。SUBJECT-NAME MARK都是该数据编号对应的一组相关数据。

为了能够进行二分查找,表中数据排列必须有序。这里所说的有序,实际上指的应该是表中数据编号要么从大到小,要么从小到大。因为单纯的数据,如考试科目名称SUBJECT-NAME,是无所谓大小的,也就无法进行排序。

定义完成之后,仍然需要对表初始化。此时,便不能同顺序查找方式一样,对表中数据任意进行初始化了。为实现二分查找,数据编号SUBJECT-CODE必须有序。因此,初始化后的表其内部数据通常应该如表所示。

学生成绩表1

SUBJECT-CODE

SUBJECT-NAME

MARK

1

Politics

88

2

Math

93

3

Chinese

86

4

English

78

5

Physics

73

6

Chemistry

75

7

Biology

82

8

Geography

85

这里,课程编号是SUBJECT-CODE1~8是有序的。由于本表中课程编号即为数据编号,数据编号的有序即表明数据的有序。因此,该表可以用于二分查找。

可以看到,以上初始化后的表,表中数据为升序排列。由于对于二分查找方式而言,只要表中数据有序排列就可以了,而不论升序还是降序。因此,以下将初始化数据进行降序排列的方式也是正确的。表内数据如表所示。

  学生成绩表2

SUBJECT-CODE

SUBJECT-NAME

MARK

8

Politics

88

7

Math

93

6

Chinese

86

5

English

78

4

Physics

73

3

Chemistry

75

2

Biology

82

1

Geography

85

此外,以上两张表将数据编号都设为了一组连续数字。在没有特别要求的情况下,通常为方便起见,数据编号最好指定为连续数字。当然,根据用于二分查找方式表的要求说明,数据只要有序就行了,而不一定非要连续。故下面这组数据按照习惯虽不常用,但仍然是正确的。相应数据如表所示。

  学生成绩表3

SUBJECT-CODE

SUBJECT-NAME

MARK

2

Politics

88

5

Math

93

8

Chinese

86

10

English

78

12

Physics

73

15

Chemistry

75

21

Biology

82

34

Geography

85

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值