русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Практическая работа №12.


Дата добавления: 2014-11-27; просмотров: 1014; Нарушение авторских прав


Тема: Изучение приемов обработки массивов

Цель: Изучить приемы обработки массивов (одномерных и двумерных).

Экспериментальный раздел работы

· Линейная сортировка (сортировка отбором)

Идея линейной сортировки по невозрастанию заключается в том, чтобы последовательно просматривая весь массив, отыскать наибольшее число и по­местить его на первую позицию, обменяв его с элементом, который ранее за­нимал первую позицию. Затем просматриваются все остальные элементы массива и выполняется аналогичная операция по отбору из рассматриваемой части массива максимального элемента и обмену местами этого элемента и первого в рассматриваемой части, и т. д.

Введем в разделе описания следующие целые переменные:

I — для указания позиции первого элемента в рассматриваемой части массива;

J — для указания позиции очередного сравниваемого с ним элемента;

N — для временного хранения значения первого элемента для обмена значе­ниями с максимальным из рассматриваемой части массива;

L — параметр цикла при выводе текущего значения элементов массива в про­цессе сортировки для отслеживания происходящих в массиве изменений;

А — переменная, значение которой будет равно числу перестановок элементов (число итераций – повторений).

Полный текст программы линейной сортировки массива М по невозрастанию может быть записан следующим образом:

program Sort_Lin; (Линейная сортировка по невозрастанию}

const

Count = 20;

М: аrrау [1..Count] of byte = (9, 11, 12, 3, 19, 1, 5, 17, 10, 18, 3, 19, 17, 9, 12, 20, 20, 19, 2, 5):

var

I, J, N, L : Byte;

A : integer;

begin

Writeln (‘Исходный массив:' );

for I := 1 to Count do

Write ( ' ‘, M[I] ) ;

Writeln ;

A:=0;

for I := 1 to Count - 1 do {Изменять размер неотсортированной части массива}

for J:=I+1 to Count do (Сравниваем поочередно 1-й элемент неотсортированной части массива со всеми от I+1-го до конца}



begin

А:=А+1;

if M[I] < M[J] then {Если в неотсортированной части массива нашли элемент, больший, чем 1-й, то обменять их местами}

begin

N := M[I]; {Запомнить на время значение М [I] }

M[I] :=M[J];

M[J] := N;

end;

for L := 1 to Count do

Write (‘ ', M [L] );

Writeln (‘Число итераций=', А);

end ;

end.

По послед­нему значению А можно определить, что для данного массива линейная сор­тировка по невозрастанию выполняется за 190 итераций.

· Сортировка методом пузырька

Один из самых популярных методов сортировки — «пузырьковый» метод — основан на том, что в процессе исполнения алгоритма более «легкие» элемен­ты массива постепенно «всплывают». Особенностью данного метода явля­ется сравнение не каждого элемента со всеми, а сравнение в парах соседних элементов. Алгоритм пузырьковой сортировки по убыванию состоит в по­следовательном просмотре снизу вверх (от начала к концу) массива М. Если для соседних элементов выполняется условие, согласно которому элемент, находящийся справа, больше элемента, находящегося слева, то выполняется обмен значениями этих элементов.

Текст программы сортировки массива по невозрастанию можно записать следующим образом:

program Sort_Puz; {Сортировка массива «пузырьковым» методом по невозрастанию) const

Count = 20;

М: аrrау [1..Count] of byte = (9, 11, 12, 3, 19, 1, 5, 17, 10, 18, 3, 19, 17, 9, 12, 20, 20, 19, 2, 5):

var

I, J, N, L : Byte;

A : integer;

begin

Writeln (‘Исходный массив:' );

for I := 1 to Count do

Write ( ' ‘, M[I] ) ;

Writeln ;

A:=0;

for I := 2 to Count do {Сортировка «пузырьковым» методом по невозрастанию}

begin

for J:=Count downto I do

begin A:=A+1;

if M[J-1]<M[J] then {Если злеиент справа больше элемента слева,
то «вытеснить» его влево - пузырек «всплывает»}
begin .

K:=M[J-1]; {Обмен значениями этих элементов}

M[J-1]:=M[J);

M[J]:=K;

{Печатать текущее состояние массива после каждой перестановки}

for L := 1 to Count do

Write (‘ ', M [L] );

Writeln (‘Число итераций=', А);

end ;

end;

end; {Завершение сортировки}

end.

Запустите интегрированную среду программирования. Введите текст програм­мы Sort_Puz и запишите файл на диск под соответствующим именем, а затем откомпилируйте его. После успешного завершения компиляции запустите программу, отслеживая в пошаговом режиме текущие значения переменных I, J, К, М[J], M[J—1], всего массива М, а по окончании цикла J просматривая изменения массива в результате одного прохода. Как можно заметить, при помощи оператора for с параметром J выполняется циклический просмотр элементов массива от последнего до второго, и при этом элементы, большие, чем «соседи» слева, смешаются при обмене к началу массива, а меньшие сме­щаются вправо — «всплывают» в конце массива. Каждый проход фиксиру­ется счетчиком — увеличением на единицу значения переменной А. После каждого просмотра-сравнения элементов массива просматриваемый участок массива уменьшается на один элемент, так как из рассмотрения Исключается самый левый (самый большой) элемент. Такое уменьшение просматриваемо­го участка реализуется при помощи внешнего цикла for с параметром I. По последнему значению А можно определить, что для данного массива сорти­ровка по невозрастанию пузырьковым методом выполняется за 170 итераций.

· Метод быстрой сортировки с разделением

Оба рассмотренных выше метода достаточно просты и наглядны, но не очень эффективны. Значительно быстрее работает алгоритм сортировки К. Хоора, который называют сортировкой с разделением, или быстрой сортировкой. В основу алгоритма положен метод последовательного деления массива на части. Рассмотрим пример программы, реализующей этот метод.

program Quck_sort; {Быстрая сортировка по невозрастанию дроблением массива на части}

uses Crt;

Count = 20;

М: аггау [1..Count] of byte = (9, 11, 12, 3, 19, 1, 5, 17, 10, 18, 3, 19, 17, 9, 12, 20, 20, 19, 2, 5):

var

I, A: integer;

procedure QuickS(First, Last: integer);

var I, J, X, W, L: integer ;

begin

I:=First ; {Левая граница массива - первый элемент}

J:=Last ; {Правая граница массива - последний элемент}

X:=M [(First + Last) div 2]; {Определить середину массива}

repeat

while M[I]>X do I:=I + 1;

while X>M[J] do J:=J – 1;

A: =A+1; {Увеличить число итераций обмена элементов}

if I<=J then

begin {Поменять местами элементы}

W: = M [I];

M[I]:=M[J];

M[J]:=W;

I:=I+1;

J:=J-1; {Печатать текущее состояние массива после каждой перестановки}

for L := 1 to Count do

Write (‘ ', M [L] );

Writeln (‘Число итераций=', А);

end ;

until I>J;

if First<J then QuickS (First, J); {Рекурсивный вызов процедуры QuickS}

if I<Last then QuickS (I, Last); {Рекурсивный вызов процедуры QuickS}

end; {Конец сортировки}

begin {Начало основной программы}

ClrScr;

Writeln ('Исходный массив:);

Writeln;

for I:=1 to Count do

Write (M[I]:3,' ');

Writeln;

A:=0;

QuickS (1,Count); {Вызов процедуры сортировки QuickS}

Writeln ('Отсортированный массив:');

Writeln;

for I:=l to Count do Write (M[I]:3, ‘ ');

Writeln;

end.

По последнему значению А можно определить, что для данного массива сор­тировка по невозрастанию выполняется за 27 итераций.



<== предыдущая лекция | следующая лекция ==>
Практическая работа № 11. | Бинарный поиск в упорядоченных массивах


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.008 сек.