У вас вопросы?
У нас ответы:) SamZan.net

Лекция 8 Алгоритмы сортировки массивов

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 26.12.2024

5

Лекция 8. Алгоритмы сортировки массивов.

Простой выбор.

Данный метод основан на выборе минимального элемента и обмене его с текущим элементом.

program sort_vybor;

  uses crt;

  const n=5;

  type mas=array[1..n]of integer;

  var i,j,nom:byte; a:mas; v:integer;

      begin

        clrscr;

        for i:=1 to n do readln(a[i]);

        for i:=1 to n-1 do

         begin

           nom:=i;

           for j:=i+1 to n do

               begin

                 if a[nom]>=a[j] then nom:=j;

               end;

           if nom<>i then

                       begin

                          v:=a[i];

                          a[i]:=a[nom];

                          a[nom]:=v

                       end

         end;

         for i:=1 to n do writeln(a[i]);

         readkey;

      end.

Простой обмен - метод "Пузырька".

Метод "пузырька" основан на том, что сравниваются пары соседних элементов и производится обмен значений таким образом, чтобы больший элемент оказался справа. При этом максимальный элемент как бы "всплывает" вверх.

program sort_puzirek;

 uses crt;

 const n=5;

 type mas=array[1..n] of integer;

 var a:mas; i:byte; v:integer; p:boolean;

    begin

       clrscr;

       for i:=1 to n do readln(a[i]);

       writeln;

       p:=true;

       while p<>false do

         begin

           p:=false;

           for i:=1 to n-1 do

              begin

                if a[i]>=a[i+1] then

                   begin

                     v:=a[i];

                     a[i]:=a[i+1];

                     a[i+1]:=v;

                     p:=true;

                   end;

              end;

         end;

       for i:=1 to n do writeln(a[i]);

       readkey;

    end.

Простые вставки.

Данный метод основан на поиске минимального, вставке его в начало фрагмента массива и сдвиге вправо оставшейся части фрагмента.

Просматривать последовательно x2,…,xn и каждый новый элемент вставлять на подходящее место в уже упорядоченную совокупность x1,…,xi-1. Это место определяется последовательным сравнением xi с упорядоченными элементами x1,…,xi-1.

program sort_prostye_vstavki;

 uses crt;

 const n=5;

 type mas=array[1..n] of integer;

 var a:mas; i,j,k:byte; v:integer;

    begin

       clrscr;

       for i:=1 to n do readln(a[i]);

       writeln;

       for i:=2 to n do

         begin

           for j:=1 to i-1 do

              begin

                if a[i]<=a[j] then

                   begin

                     v:=a[i];

                     for k:=i downto j+1 do

                          a[k]:=a[k-1];

                     a[j]:=v;

                   end;

              end;

         end;

       for i:=1 to n do writeln(a[i]);

       readkey;

    end.

Бинарные вставки.

Усовершенствованная разновидность метода сортировки простыми вставками. Место, на которое надо вставить xi, в уже упорядоченную совокупность   x1,…,xi-1, определяется алгоритмом деления пополам. Получается новый алгоритм сортировки - сортировка бинарными вставками.  По числу сравнений алгоритм сортировки бинарными вставками лучше, чем рассмотренные выше алгоритмы.

program sort_binary_vstavki;

 uses crt;

 const n=8;

 type mas=array[1..n] of integer;

 var a:mas; i,j,k,p,q,s:byte; v:integer;

    begin

       clrscr;

       for i:=1 to n do readln(a[i]);

       writeln;

       for i:=2 to n do

         begin

           p:=1; q:=i;

           while p<q do

             begin

               s:=(p+q) div 2;

               if a[s]<a[i] then p:=s+1 else q:=s;

             end;

           if a[i]<a[s] then j:=s;

           if a[i]>a[s] then j:=s+1;

           v:=a[i];

           for k:=i downto j+1 do

                  a[k]:=a[k-1];

           a[j]:=v;

         end;

       for i:=1 to n do writeln(a[i]);

       readkey;

    end.

Использование модуля CRT 

при оформлении результатов работы программы.

Модуль CRT содержит константы, переменные, процедуры и функции, предназначенные для работы с консолью. Если стандартные процедуры ввода/вывода реализуются через операционную систему, то модуль CRT позволяет работать с BIOS и непосредственно с видеопамятью.

При работе с экраном через модуль CRT весь экран разбивается на отдельные строки, а каждая строка - на отдельные позиции, в каждую из которых можно поместить один символ (в том числе и пробел). Таким образом весь экран разбивается на отдельные неделимые прямоугольные элементы. Положение каждого элемента экрана определяется его координатами X (номер столбца, в котором расположен элемент) и Y (номер строки). Для каждого элемента можно задать цвет фона (задний план - BackGround) и цвет символа (передний план). Кроме того, символ можно сделать мерцающим. Вся эта информация  - атрибуты символа - помещается в одном байте информации следующим образом:

Биты

7

6

5

4

3

2

1

0

М

Ф

Ф

Ф

С

С

С

С

Буквой М обозначен бит мерцания (символ мерцает, если в этом бите установлена 1), буквами Ф - биты, в которые записывается код цвета фона (биты 4-6), буквами С - биты, в которые помещается код цвета символа (биты 0-3).

Модуль CRT позволяет работать не только со всем экраном, но и выделять в нем прямоугольные окна. Любое окно задается своим левым верхним и правым нижним углом. Эти углы, так же как и положение любого объекта на экране задаются двумя координатами X и Y. При работе в окне координаты отсчитываются от левого верхнего угла окна. При запуске программы выделенное окно совпадает по размеру со всем экраном. По умолчанию установлен режим работы адаптера - 25 строк по 80 позиций в каждой, соответственно координаты такого окна - (1,1) и (80,25).

Коды цветов.

Black

0

Черный

Blue

1

Синий

Green

2

Зеленый

Cyan

3

Голубой

Red

4

Красный

Magenta

5

Фиолетовый

Brown

6

Коричневый

LightGray

7

Светло-серый

DarkGray

8

Темно-серый

LightBlue

9

Светло-синий

LightGreen

10

Светло-зеленый

LightCyan

11

Светло-голубой

LightRed

12

Розовый

LightMagenta

13

Светло-фиолетовый

Yellow

14

Желтый

White

15

Белый

Blink

128

Мерцание символа

Цвета с кодами от 0 до 7 включительно можно использовать как для символов, так и для фона. Остальные цвета и код мерцания можно использовать только для символов.

Процедуры модуля CRT.

ClrScr - Очистка экрана: процедура очищает текущее окно, заполняя его цветом фона, и помещает курсор в его верхний левый угол с координатами (1,1).

TextMode(Mode: Word) - задание текстового режима: устанавливает текстовый режим, заданный параметром Mode, увеличивает текущее окно до целого экрана. Некоторые значения параметра Mode:

0

40х25 черно-белый для цветного адаптера

1

40х25 цветной для цветного адаптера

2

80х25 черно-белый для цветного адаптера

3

80х25 цветной для цветного адаптера

TextBackground(Color: Byte) - задание цвета фона. Для того, чтобы все окно  изменило цвет фона, необходимо после данной процедуры вызвать процедуру ClrScr, иначе будет изменяться лишь фон отдельных элементов при их вводе или выводе.

TextColor(Color: Byte) - задание цвета символов и параметра мерцания.

Window(x1,y1,x2,y2: Byte) - задает размеры окна на экране и помещает курсор в левый верхний угол окна с координатами (1,1).

Delay(Ms: Word) - Задает задержку выполнения программы в миллисекундах.

GotoXY(X,Y:Byte) - перемещает курсор к элементу экрана с заданными координатами (координаты отсчитываются от левого верхнего угла текущего окна).

DelLine - удаляет строку, в которой находится курсор.

InsLine -  вставляет пустую строку на экране в месте расположения курсора и заполняет ее цветом фона.

Функции модуля CRT.

WhereX: Byte - возвращает текущую координату X курсора.

WhereY: Byte - возвращает текущую координату Y курсора.

Readkey: Char - считывает символ с клавиатуры.

KeyPressed: Boolean  - анализирует нажатие клавиши клавиатуры (за исключением вспомогательных клавиш Shift, Alt, NumLock и т.п.). Результат - True, если клавиша на клавиатуре нажата,  False - клавиша не нажата.

Пример: Установить текстовый режим 40х25 для цветного адаптера. Разместить в центре экрана окно, размерами 15х15. Установить цвет фона  - голубой. Вывести в окне 5 раз слово "ПРИВЕТ" таким образом, чтобы текст в результате разместился по центру окна, и каждая строка была нового цвета. Определить позицию курсора и вывести результат в нижней строке окна слева. По нажатию любой клавиши необходимо вернуть экран в режим 2.




1. реферат дисертації на здобуття наукового ступеня доктора економічних наук Львів 2005 Дисертацією є.html
2. Metro; АТП-Стадион ул
3. Двойная выгода Розыгрыш путевки на ГОА Утро с PROдвижением
4.  Reforms in Civil 424 PRT VI
5. 1936 гг Центральные органы управления народным хозяйством в 19171936гг
6. СанктПетербургский Гуманитарный университет профсоюзов УтвержденоУченым советомфакультета культурыП
7. темах подвижной радиосвязи на тему- Расчёт потерь передачи комплексной радиолинии в системах подвижной
8. Просвіт Самчиківський СБК 2 Деревянська Віталіна Вікторівна Д
9. реферат дисертації на здобуття наукового ступеня кандидата біологічних наук3
10. оказалась в очень тяжелом положении.html
11. Основные типы взаимодействия людей
12. Статья- Установки и стереотипы массового сознания
13. це соціальнодемографічна група яка займає певне місце в соціальній структурі суспільства характеризуєть
14. Число ~связей в молекуле бензола 1 3 2 6 3 9 4 12 2.html
15. Как всякий организованный процесс семейное воспитание предусматривает определенную целеустремленно
16. Зубодробительное правило 1
17. Тема Дробление и сушка известняка Производительность 45 тч Влажность исходного материала 10 Пылеви
18. Планирование и реализация процедуры внедрения линий связи на железнодорожном пути
19. Рассылка
20. I Ning kui neid on plju siis m teen teile k~psikesi jou Только не вздумайте сдавать мой предмет Чтобы его сдать нужно очень