Здавалка
Главная | Обратная связь

Сортування масиву. Методи сортування масиву



 

Питання для вивчення:

1. Поняття сортування масивів.

2. Метод "бульбашки".

3. Сортування вставками.

4. Сортування за допомогою вибору.

 

Поняття сортування масивів. Сортуванням або упорядкуванням масиву називається розташування його елементів за зростанням (або спаданням). Якщо не всі елементи різні, то треба говорити про неубивающей (або невозрастающем) порядку. Взагалі кажучи, це велика і складна тема, в якій відомо багато різних алгоритмів. Критерії оцінки ефективності цих алгоритмів можуть включати наступні параметри:

- кількість кроків алгоритму, необхідних для впорядкування;

- кількість порівнянь елементів;

- кількість перестановок, виконуваних при сортуванні.

Метод "бульбашки". Мабуть, найпростішим методом сортування є так званий метод "бульбашки". Щоб усвідомити його ідею, потрібно уявити, що масив (таблиця) розташований вертикально. Елементи з великим значенням спливають вгору на зразок великих бульбашок. При першому проході уздовж масиву, починаючи прохід "знизу", береться перший елемент і по черзі порівнюється з подальшими. При цьому:

- якщо зустрічається більш "легкий" (з меншим значенням) елемент, то вони міняються місцями;

- при зустрічі з більш "важким" елементом, останній стає "еталоном" для порівняння, і всі наступні порівнюються з ним.

В результаті найбільший елемент виявляється в самому верху масиву.

Під час другого проходу вздовж масиву знаходиться другий за величиною елемент, який поміщається під елементом, знайденим при першому проході, т.е на другу зверху позицію, і т.д.

Потрібно зауважити, що при другому і подальших проходах, немає необхідності розглядати елементи, які розглянуті раніше. Іншими словами, під час j-го проходу не перевіряються елементи, що стоять на позиціях вище j.

Тепер можна привести текст програми упорядкування масиву M [1 .. N]:

begin

for j: = 1 to N-1 do

or i: = 1 to N-j do

if M [i]> M [i +1] then

swap (M [i], M [i +1])

end;

Стандартна процедура swap буде використовуватися і в інших алгоритмах сортування для перестановки елементів місцями:

procedure swap (var x, y: ...);var t: ...;

begin

t: = x;

x: = y;

y: = t

end;

Потрібно зауважити, що якщо масив M - глобальний, то процедура могла б містити тільки аргументи (а не результати). Крім того, враховуючи специфіку її застосування в даному алгоритмі, можна звести число парметр до одного (якому?), А не двом.

Сортування вставками. Другий метод називається метод вставок. Тому на j-му етапі ми "вставляється" j-ий елемент M [j] в потрібну позицію серед елементів M [1], M [2],. . ., M [j-1], які вже впорядковані. Після цієї вставки перший j елементів масиву M будуть впорядковані.

Щоб зробити процес переміщення елемента M [j], більш простим, корисно скористатися бар'єром: ввести "фіктивний" елемент M [0], чиє значення буде свідомо менше значення будь-якого з "реальних" елементів масиву (як це можна зробити?). Позначити це значення через-00.

Якщо бар'єр не використовувати, то перед вставкою M [j], в позицію i-1 треба перевірити, чи не буде i = 1. Якщо ні, тоді порівняти M [j] (який в цей момент перебуватиме в позиції i) з елементом M [i-1].

Описаний алгоритм має наступний вигляд:

begin

M [0]: =-00;

for j: = 2 to N do

begin

i:

while M [i] <M [i-1] do

begin

swap (M [i], M [i-1]);

i: = i-1

end

end

end;

Сортування за допомогою вибору. Ідея сортування за допомогою вибору не складніше двох попередніх. На j-му етапі вибирається елемент найменший серед M [j], M [j +1],. . ., M [N] (див. процедуру FindMin) і міняється місцями з елементом M [j]. В результаті після j-го етапу всі елементи M [j], M [j +1],. . ., M [N] будуть впорядковані.

Сказане можна описати таким чином:

begin

for j: = 1 to N-1 do

begin

FindMin

swap (M [j], M [i])

end

end;

У програмі, як уже було сказано, використовується процедура FindMin, що обчислює індекс lowindex елемента, найменшого серед елементів масиву з індексами не менше, ніж startindex:

procedure FindMin (startindex: integer; var lowindex: integer);

var lowelem: ...;

u: integer;

begin

lowindex: = startindex;

lowelem: = M [startindex];

for u: = startindex +1 to N do

if M [u] <lowelem then

begin

lowelem: = M [u];

lowindex: = u

end

end;

Питання для контролю вивченого матеріалу:

1. Що являє собою сортування масиву?

2. Що являє собою метод сортування “бульбашки”?

3. Які ще існують методи сортування масивів?

Література:

Фаронов В.В. Турбо Паскаль 7.0. Начальный курстор. – М: Диалектика, 1997. – 487 стор. 182-189

 

Урок № 21

(згідно робочої навчальної програми)







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.