Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 семестр Лабораторна робота 3.docx
Скачиваний:
0
Добавлен:
15.01.2020
Размер:
655.12 Кб
Скачать

Лабораторна робота №3

Тема: методи впорядкування одновимірних масивів.

Мета вивчити алгоритми простих методів упорядкування . Навчитися їх використовувати.

Загальні завдання:

1). Упорядкувати методом вибору масив цілих чисел за спаданням.

2). Упорядкувати обміном парні елементи масива дійсних чисел за зростанням.

3). Упорядкувати вставленням масив чисел за спаданням і знайти мінімальний елемент.

4). Написати програму для оціння швидкості методів сортування кількість елементів масиву 10, 100, 1000, 20000.

Індивідуальні завдання:

Заповнити масив А[40] випадковими числами в діапазоні 10-999;

вивести елементи массиву на екран в рядок;

упорядкувати діапазон елементів массиву за таких умов:

ТЕОРЕТИЧНИЙ МАТЕРІАЛ

Упорядкування масивів

Упорядкуванням об’єктів називається розміщення цих об’єктів за зростанням або спаданням відповідно до визначеного лінійного відношення порядку, наприклад такого, як відношення “≤” для чисел. При розв’язуванні задачі упорядкування як правило вимагається мінімальне використання допоміжної пам’яті, що вказує на недопустимість використання допоміжних масивів.

Усі методи упорядкування можна поділити на:

  • прямі методи;

  • удосконалені методи.

Прямі методи упорядкування за принципом, покладеним в основу методу, в свою чергу поділяються на:

  • упорядкування вставлянням;

  • упорядкування вибором;

  • упорядкування обміном.

Удосконалені методи упорядкування базуються на таких самих принципах, що і прямі, але використовують деякі оригінальні ідеї для збільшення швидкості процесу упорядкування. Прямі методи на практиці використовуються рідко, так як мають відносно низьку швидкодію. Однак, вони добре показують суть основаних на них удосконалених методів. Крім того, у деяких випадках (як правило, при невеликій кількості елементів масиву і/або особливому розміщенні елементів масиву) деякі із прямих методів можуть навіть перевершити удосконалені методи.

Упорядкування вставлянням

Принцип методу:

Масив поділяється на дві частини: упорядковану і не упорядковану. Елементи із не упорядкованої частини по черзі вибираються і вставляються у впорядковану частину не порушуючи при цьому упорядкованості елементів. На початку роботи алгоритму до упорядкованої частини масиву відносять тільки перший елемент, а до неупорядкованої – усі інші елементи.

Таким чином, потрібно n-1 раз (n – розмірність масиву) виконати дії:

  • вибрати i–й елемент із неупорядкованої частини і зберегти у допоміжній змінній;

  • знайти позицію j у впорядкованій частині масиву, у якій вибраний елемент не порушуватиме упорядкованості;

  • зсув елементів масиву від i-1–го до j-1–го вправо для звільнення знайденої позиції;

  • вставити вибраний елемент у знайдену j–ту позицію.

Схематично описані дії можна подати так:

j=3

i=6

n=9

– Збереження

– Пошук місця вставляння

– Зсув

– Вставляння

1

2

3

4

5

6

7

8

9

0

1

4

5

7

3

2

5

4

 

3

Упорядкуємо за методом вставляння масив  4   0   7   5   1   3  :

1

2

3

4

5

6

1

2

3

4

5

6

4

0

7

5

1

3

0

4

5

7

1

3

1

2

3

4

5

6

1

2

3

4

5

6

0

4

7

5

1

3

0

1

4

5

7

3

1

2

3

4

5

6

1

2

3

4

5

6

0

4

7

5

1

3

Результат

0

1

3

4

5

7

Отже,

const MaxN = 20;

type TElement = Real;

TMas = array[1..MaxN] of TElement;

var A : TMas; T : TElement; N, i, j : Integer;

begin Write('Введіть кількість елементів масиву – '); ReadLn(N);

for i := 1 to N do begin Write('A[', i, ']='); ReadLn(A[i]); end;

WriteLn('Масив до упорядкування:');

for i := 1 to N do Write(A[i], ' '); WriteLn;

for i := 2 to n do

begin T := A[i]; { збереження елементу із невідсортованої частини масиву }

j := 1; {пошук позиції вставлення}

while T > A[i] do j := j + 1;

for k := i –1 downto j do A[k+1] := A[k];{} {зсув елементів}

A[j] := T; {вставляння елемента у знайдену позицію}

end;

WriteLn(' Упорядкуваний масив:'); for i := 1 to N do Write(A[i], ' '); WriteLn;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]