Новости           

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Благодарности

Гостевая книга

От автора

TurboSort

              Инструментарий баз данных предоставляет  функцию  TurboSort,
         которая является разновидностью QuickSort. Она может быть исполь-
         зована для сортировки любого типа данных,  если их длина равна по
         меньшей мере двум байтам. QuickSort используется, так как это са-
         мая быстрая сортировка в большинстве ситуаций,  как вы  видели  в
         Главе  1.  TusboSort  находится в файле SORT.BOX,  который должен
         быть включен в каждую программу,  использующую ее. TurboSort объ-
         является следующим образом
              function TurboSort(ItemSize: integer): integer;
         ItemSize -  это  размер данных,  которые будут сортироваться;  он
         должен быть вычислен с  помощью  SizeOf.  Значение,  возвращаемое
         TurboSort, интерпретируется, как показано в таблице 9-3.
              TurboSort может сортировать до 32767 элементов. Хотя функция
         будет  пытаться сортировать их в оперативной памяти для скорости,
         она будет использовать временный файл на диске, когда это необхо-
         димо.
                                                      Таблица 9-3
                         Коды возврата TurboSort
         --------------------------------------------------------------
          Значение            Смысл
         --------------------------------------------------------------
              0         Сортировка выполнена успешно
              3         В компьютере нет достаточной памяти
              8         Длина элемента меньше 2
              9         Более 32767 входных элементов для сортировки
              10        Ошибка записи на диск
              11        Ошибка чтения с диска
              12        Нет возможности создать временный файл на диске
         --------------------------------------------------------------

                   InP, OutP и Less
         -----------------------------------------------------------------

              TusboSort имеет три фазы работы:  ввод данных, которые будут
         сортироваться,  сортировка данных и вывод отсортированных данных.
         Для того, чтобы помочь TurboSort выполнить свою работу, вы должны
         создать три процедуры,  называемые InP, OutP, Less. Данные проце-
         дуры декларируются как forward с помощью SORT.BOX,  но вы  должны
         создать действительную реализацию.
              Процедура InP используется для  передачи  TurboSort  данных,
         которые должны сортироваться, по одному элементу за раз. Действи-
         тельная передача выполняется, используя SortRelease, которая так-
         же определена в SORT.BOX. Она объявляется следующим образом
              procedure SortRelease(item); 1
         Так как тип параметра item не задан,  могут сортироваться  данные
         любого типа.  Простая процедура InP, которая считывает десять це-
         лых,  введенных с клавиатуры,  и передает их TurboSort для сорти-
         ровки, показана ниже:
              procedure InP;
              var
                f: integer;
              begin
                for i:=1 to 10 do ReadLn(data[i]);
                for i:=1 to 10 do SortRelease(data[i]);
              end; {InP}
              Процедура OutP  используется для поэлементного чтения отсор-
         тированных данных из TurboSort с помощью SortReturn, определенной
         в SORT.BOX. SortReturn объявляется следующим образом:
              procedure SortReturn(item);
         Так как  тип  параметра  item не задан,  то могут быть возвращены
         данные любого типа.  Процедура OutP может не обладать информацией
         о том, сколько элементов данных будет возвращаться, поэтому функ-
         ция SorEOS может быть использована для проверки на  конец данных.
         Следующая простая процедура OutP может быть использована с целыми
         числами, генерируемыми процедурой InP, показанной ранее:
              procedure OutP;
              var
                data: integer;
              begin
                repeat
                  SortReturn(data);
                  write(data,' ');
                until SortEOS;
              end; {OutP}
              Функция Less является наиболее важной из трех  рассматривае-
         мых,  так  как она вызывается каждый раз,  когда сравниваются два
         элемента.  Функция Less возвращает  TRUE,  если  первый  аргумент
         меньше  второго.  Less декларирована в SORT.BOX,  как имеющая два
         параметра,  называемые Х и У, которые вы должны перекрыть с двумя
         логическими переменными,  имеющими тот же самый тип, что и сорти-
         рованные  данные.  Перекрытие  реализуется  с   помощью   команды
         alsolute.  Например,  данная  версия Less может быть использована
         для сравнения двух целых переменных:
              function Less;
              var
                first: char absolute X;
                second: char absolute Y;
              begin
                Less := first < second;
              end; {Less}
              В качестве примера связи этих процедур  рассмотрим  короткую
         программу,  которая считывает десять целых числе,  сортирует их и
         отображает отсортированный список:
              program simple_sort;

              var
                data: array [1..10] of integer;
                result: integer;

              {$i sort.box} {read in the sort routines}

              procedure InP;
              var
                f: integer;
              begin
                for i:=1 to 10 do ReadLn(dara[i]);
                for i:=1 to 10 do SortRelease(data[i]);
              end; {InP}

              function Less;
              var
                first: char absolute X;
                second: char absolute Y;
              begin
                Less := first < second;
              end; {Less}

              procedure OutP;
              var
                data: integer;
              begin
                repeat
                  SortReturn(data);
                  write(data, ' ');
                until SortEOS;
              end; {OutP}

              begin
                result:=TurboSort(sizeOf(integer));
                writeLn('sort result; ', result);
              end.


                            GINST
         -----------------------------------------------------------------

              Программа GINST, предоставляемая инструментарием баз данных,
         позволяет вам создать программу  подготовки  терминалов,  которая
         дает  возможность  пользователям  устанавливать свои программы на
         Турбо Паскале на своих компьютерах. Существует много типов компь-
         ютеров,  терминалов и прочего; программа GINST позволяет вам соз-
         дать программы на Турбо Паскале, которые могут быть установлены в
         различных  условиях.  Как таковая данная программа не будет расс-
         матриваться.  Однако,  интересующиеся читатели могут обратиться к
         руководству пользователя инструментария баз данных.

(с)Все права защищены

По всем интересующим вопросампрошу писать на электронный адрес

    Rambler's Top100 PROext: Top 1000
    Rambler's Top100 Яндекс цитирования
Hosted by uCoz