阿木博主一句话概括:PL/I 语言中的查找算法实现:顺序查找与二分查找
阿木博主为你简单介绍:
本文将围绕PL/I语言,探讨两种常见的查找算法:顺序查找和二分查找。通过代码实现,分析这两种算法的原理、优缺点以及在PL/I语言中的具体应用。
一、
查找算法是计算机科学中一种基本且重要的算法,用于在数据集合中查找特定元素。在PL/I语言中,查找算法同样扮演着重要角色。本文将详细介绍顺序查找和二分查找两种算法在PL/I语言中的实现。
二、顺序查找算法
1. 原理
顺序查找算法是一种简单且直观的查找方法。它从数据集合的第一个元素开始,逐个比较,直到找到目标元素或遍历完整个数据集合。
2. 代码实现
pl/i
IDENTIFICATION DIVISION.
PROGRAM-ID. ORDER-FIND.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OUTPUT-FILE ASSIGN TO "OUTPUT.TXT".
DATA DIVISION.
FILE SECTION.
FD OUTPUT-FILE.
01 OUTPUT-RECORD.
05 OUTPUT-FIELD PIC X(50).
WORKING-STORAGE SECTION.
01 DATA-ARRAY.
05 DATA-ELEMENTS OCCURS 10 TIMES.
10 DATA-VALUE PIC 9(03).
01 TARGET-VALUE PIC 9(03).
01 INDEX PIC 9(03) VALUE 1.
01 FOUND PIC X(01) VALUE 'N'.
PROCEDURE DIVISION.
PERFORM INITIALIZE-DATA.
PERFORM FIND-VALUE.
PERFORM DISPLAY-RESULT.
STOP RUN.
INITIALIZE-DATA.
MOVE 10 TO DATA-VALUE(1).
MOVE 20 TO DATA-VALUE(2).
MOVE 30 TO DATA-VALUE(3).
MOVE 40 TO DATA-VALUE(4).
MOVE 50 TO DATA-VALUE(5).
MOVE 60 TO DATA-VALUE(6).
MOVE 70 TO DATA-VALUE(7).
MOVE 80 TO DATA-VALUE(8).
MOVE 90 TO DATA-VALUE(9).
MOVE 100 TO DATA-VALUE(10).
MOVE 50 TO TARGET-VALUE.
FIND-VALUE.
PERFORM VARYING INDEX FROM 1 BY 1 UNTIL INDEX > 10 OR FOUND = 'Y'
IF DATA-VALUE(INDEX) = TARGET-VALUE
MOVE 'Y' TO FOUND
END-IF
END-PERFORM.
DISPLAY-RESULT.
IF FOUND = 'Y'
MOVE INDEX TO OUTPUT-FIELD
WRITE OUTPUT-RECORD FROM OUTPUT-FIELD
ELSE
MOVE 'NOT FOUND' TO OUTPUT-FIELD
WRITE OUTPUT-RECORD FROM OUTPUT-FIELD.
3. 优缺点
优点:实现简单,易于理解。
缺点:查找效率低,时间复杂度为O(n)。
三、二分查找算法
1. 原理
二分查找算法适用于有序数据集合。它通过将数据集合分为两半,比较中间元素与目标值,从而缩小查找范围。重复此过程,直到找到目标元素或查找范围为空。
2. 代码实现
pl/i
IDENTIFICATION DIVISION.
PROGRAM-ID. BINARY-FIND.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OUTPUT-FILE ASSIGN TO "OUTPUT.TXT".
DATA DIVISION.
FILE SECTION.
FD OUTPUT-FILE.
01 OUTPUT-RECORD.
05 OUTPUT-FIELD PIC X(50).
WORKING-STORAGE SECTION.
01 DATA-ARRAY.
05 DATA-ELEMENTS OCCURS 10 TIMES.
10 DATA-VALUE PIC 9(03).
01 TARGET-VALUE PIC 9(03).
01 LOW INDEX PIC 9(03) VALUE 1.
01 HIGH INDEX PIC 9(03) VALUE 10.
01 MIDDLE INDEX PIC 9(03).
01 FOUND PIC X(01) VALUE 'N'.
PROCEDURE DIVISION.
PERFORM INITIALIZE-DATA.
PERFORM BINARY-SEARCH.
PERFORM DISPLAY-RESULT.
STOP RUN.
INITIALIZE-DATA.
MOVE 10 TO DATA-VALUE(1).
MOVE 20 TO DATA-VALUE(2).
MOVE 30 TO DATA-VALUE(3).
MOVE 40 TO DATA-VALUE(4).
MOVE 50 TO DATA-VALUE(5).
MOVE 60 TO DATA-VALUE(6).
MOVE 70 TO DATA-VALUE(7).
MOVE 80 TO DATA-VALUE(8).
MOVE 90 TO DATA-VALUE(9).
MOVE 100 TO DATA-VALUE(10).
MOVE 50 TO TARGET-VALUE.
BINARY-SEARCH.
PERFORM UNTIL LOW INDEX > HIGH INDEX OR FOUND = 'Y'
COMPUTE MIDDLE INDEX = (LOW INDEX + HIGH INDEX) / 2
IF DATA-VALUE(MIDDLE INDEX) = TARGET-VALUE
MOVE 'Y' TO FOUND
ELSE IF DATA-VALUE(MIDDLE INDEX) < TARGET-VALUE
MOVE MIDDLE INDEX + 1 TO LOW INDEX
ELSE
MOVE MIDDLE INDEX - 1 TO HIGH INDEX
END-IF
END-PERFORM.
DISPLAY-RESULT.
IF FOUND = 'Y'
MOVE MIDDLE INDEX TO OUTPUT-FIELD
WRITE OUTPUT-RECORD FROM OUTPUT-FIELD
ELSE
MOVE 'NOT FOUND' TO OUTPUT-FIELD
WRITE OUTPUT-RECORD FROM OUTPUT-FIELD.
3. 优缺点
优点:查找效率高,时间复杂度为O(log n)。
缺点:需要数据集合有序,不适用于无序数据集合。
四、总结
本文介绍了PL/I语言中的顺序查找和二分查找两种算法。通过代码实现,分析了这两种算法的原理、优缺点以及在PL/I语言中的具体应用。在实际应用中,根据数据集合的特点和需求,选择合适的查找算法可以提高程序的性能。
Comments NOTHING