
- •З дисципліни "Структури даних і алгоритми"
- •2 Семестр 2010/2011
- •Дослідження ефективності методів сортування: №1 методу прямої вставки, №4 методу прямого вибору, №3 методу прямого обміну.
- •Технічне завдання на курсову роботу з дисципліни
- •1. Впорядкувати окремо кожен переріз тривимірного масиву а [p,m,n] наскрізно по рядках за незменшенням.
- •1. Алгоритм сортування №1 методу прямої вставки (з лінійним пошуком місця вставки від початку послідовності, що сортується , або «зліва»).
- •2. Алгоритм сортування №4 методу прямого вибору.
- •4 Прохід
- •3. Алгоритм сортування №3 методу прямого обміну (із запам’ятовуванням місця останньої перестановки).
- •1 Прохід
- •2 Прохід
- •7Прохід
- •Зв‘язки між модулями та головною програмою:
- •Опис призначення модулів, процедур та функцій
- •Текст програми
- •Результати:
- •Порівняльний аналіз алгоритмів Характеристика алгоритмів для сортування одновимірного масиву:
- •Порівняльна характеристика алгоритмів при сортуванні одновимірних і двовимірних масивів:
- •Порівняльна характеристика методів сортування багатовимірних масивів між собою:
- •Характеристика впливу різних геометричних розмірів багатовимірних масивів:
- •Список вживаної літератури:
2. Алгоритм сортування №4 методу прямого вибору.
Загальна схема
Значенню нижньої межі присвоюємо одиницю, а значенню верхньої — n.
Головний цикл діє поки значення нижньої межі менше за значення верхньої:
а) номерам максимального й мінімального елементів масиву присвоюємо значення нижньої межі;
б) внутрішній цикл діє від номера, наступного нижній межі, до верхньої межі:
1) якщо поточний елемент менший за мінімальний, то значенню номера мінімального елемента присвоюється номер поточного елемента;
2) якщо поточний елемент більший за максимальний, то значенню номера максимального елемента присвоюється номер поточного елемента;
в) замінюємо місцями мінімальний елемент та елемент з номером нижньої межі;
г) якщо номер максимального елемента дорівнює значенню нижньої межі, то мінімальний елемент замінюємо місцями з елементом з номером верхньої межі; в іншому випадку елемент з номером верхньої межі замінюємо місцями з максимальним елементом;
д) значення нижньої межі збільшуємо на 1, а значення верхньої межі зменшуємо на 1.
А – даний масив;
L – нижня межа сортування;
R – верхня межа сортування;
I – лічильник внутрішнього циклу;
Imin – номер мінімального елемента;
Imax – номер максимального елемента;
N- кількість елементів масиву;
Маємо початковий масив:
A
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8=N |
11 |
3 |
8 |
18 |
6 |
5 |
2 |
10 |
L:=1; R:=n; {L=1; R=8}
прохід
Умова: L<R => true => у зовнішній цикл заходимо:
Imin:=L; {Imin=1}
Imax:=L; {Imax=1}
Робимо прохід по і {від L+1 до R} комірках:
{i=2} Якщо A[i]<A[Imin] => true =>Imin:=I {Imin=2}
{i=3} Якщо A[i]<A[Imin] => false => Якщо A[i]>A[Imax] => false
{i=4} Якщо A[i]<A[Imin] => false => Якщо A[i]>A[Imax] => true =>
Imax:=I; {Imax=4}
{i=5} Якщо A[i]<A[Imin] => true =>Imin:=I {Imin=5}
{i=6} Якщо A[i]<A[Imin] => true =>Imin:=I {Imin=6}
{i=7} Якщо A[i]<A[Imin] => true =>Imin:=I {Imin=7}
{i=8} Якщо A[i]<A[Imin] => false => Якщо A[i]>A[Imax] => false
Міняємо елементи місцями:
B:=A[Imin]; A[Imin]:=A[L]; A[L]:=B; {A[1]=2; A[7]=11}
Якщо Imax=L => false =>міняємо елементи місцями:
B:=A[Imax]; A[Imax]:=A[R]; A[R]:=B; {A[4]=10; A[8]=18}
L:=L+1; R:=R-1; {L=2; R=7}
прохід
A
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8=N |
2 |
3 |
8 |
10 |
6 |
5 |
11 |
18 |
{L=2; R=7}
Умова: L<R => true => у зовнішній цикл заходимо:
Imin:=L; {Imin=2}
Imax:=L; {Imax=2}
Робимо прохід по і {від L+1 до R} комірках:
{i=3} Якщо A[i]<A[Imin] => false => Якщо A[i]>A[Imax] => true =>Imax:=I {Imax=3}
{i=4} Якщо A[i]<A[Imin] => false => Якщо A[i]>A[Imax] => true =>Imax:=I {Imax=4}
{i=5} Якщо A[i]<A[Imin] => false => Якщо A[i]>A[Imax] => false
{i=6} Якщо A[i]<A[Imin] => false => Якщо A[i]>A[Imax] => false
{i=7} Якщо A[i]<A[Imin] => false => Якщо A[i]>A[Imax] => true =>Imax:=I {Imax=7}
{L=Imin — заміну елементів проводити не треба}я
Якщо Imax=L => false =>міняємо елементи місцями:
{Imax=R => заміну елементів проводити не треба}
L:=L+1; R:=R-1; {L=3; R=6}
Масив залишається без змін.
прохід
A
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8=N |
2 |
3 |
8 |
10 |
6 |
5 |
11 |
18 |
{L=3; R=6}
Умова: L<R => true => у зовнішній цикл заходимо:
Imin:=L; {Imin=3}
Imax:=L; {Imax=3}
Робимо прохід по і {від L+1 до R} комірках:
{i=4} Якщо A[i]<A[Imin] => false => Якщо A[i]>A[Imax] => true => Imax:=I;
{Imax=4}
{i=5} Якщо A[i]<A[Imin] => true =>Imin:=I {Imin=5}
{i=6} Якщо A[i]<A[Imin] => true =>Imin:=I {Imin=6}
Міняємо елементи місцями:
B:=A[Imin]; A[Imin]:=A[L]; A[L]:=B; {A[3]=5; A[6]=8}
Якщо Imax=L => false =>міняємо елементи місцями:
B:=A[Imax]; A[Imax]:=A[R]; A[R]:=B; {A[4]=8; A[6]=10}
L:=L+1; R:=R-1; {L=4; R=5}