PL/I 语言 排序算法之冒泡排序

PL/I阿木 发布于 7 天前 4 次阅读


PL/I 语言中的冒泡排序算法实现与分析

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

本文将围绕PL/I语言,详细介绍冒泡排序算法的实现,并对其性能进行分析。

PL/I 语言简介

PL/I(Programming Language One)是一种高级程序设计语言,它结合了多种编程语言的特点,如COBOL、FORTRAN和ALGOL。PL/I语言在20世纪60年代至70年代非常流行,尤其是在大型系统和企业级应用中。

冒泡排序算法原理

冒泡排序的基本思想是:比较相邻的元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行,直到没有再需要交换的元素,这意味着该数列已经排序完成。

冒泡排序算法的步骤如下:

1. 从第一个元素开始,比较相邻的两个元素。
2. 如果第一个比第二个大(升序排序),就交换它们的位置。
3. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
4. 针对所有的元素重复以上的步骤,除了最后一个。
5. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

PL/I 语言中的冒泡排序实现

以下是一个使用PL/I语言实现的冒泡排序算法的示例代码:

pl/i
IDENTIFICATION DIVISION.
PROGRAM-ID. BUBBLE-SORT.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT SORT-FILE ASSIGN TO "SORTFILE".

DATA DIVISION.
FILE SECTION.
FD SORT-FILE.
01 SORT-RECORD.
05 SORT-NUMBER PIC 9(5).

WORKING-STORAGE SECTION.
01 WS-NUMBERS.
05 WS-NUMBER OCCURS 10 TIMES.
10 WS-NUMBER-VALUE PIC 9(5).
01 WS-INDEX PIC 9(2) VALUE 1.
01 WS-TEMP PIC 9(5).

PROCEDURE DIVISION.
PERFORM INITIALIZE-NUMBERS
PERFORM BUBBLE-SORT
PERFORM PRINT-NUMBERS
STOP RUN.

INITIALIZE-NUMBERS.
MOVE 64 TO WS-NUMBER(1)
MOVE 34 TO WS-NUMBER(2)
MOVE 25 TO WS-NUMBER(3)
MOVE 12 TO WS-NUMBER(4)
MOVE 22 TO WS-NUMBER(5)
MOVE 11 TO WS-NUMBER(6)
MOVE 90 TO WS-NUMBER(7)
MOVE 88 TO WS-NUMBER(8)
MOVE 76 TO WS-NUMBER(9)
MOVE 45 TO WS-NUMBER(10).

BUBBLE-SORT.
PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 9
PERFORM VARYING WS-NUMBER-VALUE FROM WS-INDEX BY 1 UNTIL WS-NUMBER-VALUE > 9 - WS-INDEX
IF WS-NUMBER(WS-INDEX) > WS-NUMBER(WS-NUMBER-VALUE)
MOVE WS-NUMBER(WS-INDEX) TO WS-TEMP
MOVE WS-NUMBER(WS-NUMBER-VALUE) TO WS-NUMBER(WS-INDEX)
MOVE WS-TEMP TO WS-NUMBER(WS-NUMBER-VALUE)
END-IF
END-PERFORM
END-PERFORM.

PRINT-NUMBERS.
PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > 9
DISPLAY WS-NUMBER(WS-INDEX)
END-PERFORM.

冒泡排序算法性能分析

冒泡排序算法的时间复杂度分析如下:

- 最好情况:O(n),当输入数组已经是有序时,冒泡排序只需要遍历一次数组,不需要进行任何交换。
- 平均情况:O(n^2),在平均情况下,冒泡排序需要遍历整个数组多次,每次遍历都需要进行大量的比较和交换。
- 最坏情况:O(n^2),当输入数组完全逆序时,冒泡排序需要进行最大次数的比较和交换。

冒泡排序的空间复杂度为O(1),因为它只需要一个额外的变量来交换元素。

结论

冒泡排序是一种简单易实现的排序算法,但在实际应用中,由于其时间复杂度较高,通常不适用于大数据量的排序。尽管如此,冒泡排序在理解排序算法的基本原理和实现上仍然具有很高的价值。

本文通过PL/I语言实现了冒泡排序算法,并对算法的性能进行了分析。希望本文能够帮助读者更好地理解冒泡排序算法及其在PL/I语言中的实现。