Булевы выражения позволяют программе MinSort быть улучшенной, создавая новое семейство программ MinSortB. Раздел проекта 3.1 может быть заменен следующим:
Design part 3.1
BEGIN {печатаем минимальное значение из Ch1, Ch2, Ch3 в OUTPUT, оставшиеся значения помещаем в Ch1, Ch2}
IF (Ch1 < Ch2) AND (Ch1 < Ch3)
THEN
{Печатаем Ch1 в OUTPUT, помешаем Ch3 в Ch1}
BEGIN
WRITE(Ch1);
WRITE(Ch1 := Ch3)
END
ELSE
{Печатаем минимум из Ch2, Сh3 в OUTPUT. В случае необходимости копируем Ch3 в Ch2}
IF Ch2 < Ch3
THEN
BEGIN
WRITE(Ch2);
Ch2 := Ch3
END
ELSE
WRITE(Ch3)
END
Операции сравнения для поиска минимума среди четырех значений
Выражение
| Minimum
|
(Ch1 < Ch2) AND (Ch1 < Ch3) AND (Ch1 < Ch4)
| Ch1
|
(Ch2 < Ch3) AND (Ch2 < Ch4)
| Ch2
|
Ch3 < Ch4
| Ch3
|
{else}
| Ch4
|
Поэтому количество операторов WRITE в программе MinSort4B требуется всего лишь 4 + 3+ 2 = 9. В общем количество операторов WRITE для сортировки n-строки будет
n + (n – 1) + … + 3 + 2
Сравнение с IFSort и MinSort:
Количество операторов Write
|
N
| IFSortN
| MinSortN
| MINSortNB
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 040
|
|
|
| 40 320
|
|
|
| 362 880
|
|
|
| 3 628 800
| 1 022
|
|
Первое уменьшение результатов было получено благодаря лучшей идее сортировки. Второе уменьшение результатов от более мощных возможностей языка CF-Паскаль.