Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ln14 сортування масивів.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
115 Кб
Скачать
☆

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

Принцип сортування: масив також поділяється на відсортовану та невідсортовану частини. На першому кроці весь масив - невідсортований. У невідсортованій частині знаходиться мінімальний (або максимальний) елемент та міняється місцями з першим елементом невідсортованої частини. Межа відсортованої частини зсувається вправо на 1. Процедура виконується ціклчно, n-1 раз (останній елемент пересувати не треба ).

К

2 7 5 1 8 3 10

рок 1

К

1 7 5 2 8 3 10

рок 2

К

1 2 5 7 8 3 10

рок 3

К

1 2 3 7 8 5 10

рок 4

К

1 2 3 5 8 7 10

рок 5

К

1 2 3 5 7 8 10

рок 6

А) основний варіант.

|selection

1 n

A є R

min є R

s,i,j,n є N

введення n,A

(s=1,n-1)

min:=A[s]

j:=s

(i=s+1,n)

(A[i]<min)

min:=A[i] пошук мінімального елементу,

j:=i запам’ятовуванняйого індексу.

A[j]:=A[s]

A[s]:=min

виведення A

|end

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

|selection

1 n

A є R

min є R

s,i,j,n є N

введення n,A

(s=1,n-1)

(i=s+1,n)

(A[i]<min)

min:=A[i]

A[i]:=A[s]

A[s}:=min

виведення A

|end

III. Сортування за допомогою прямого обміну(бульбашкове)

Принцип сортування: зліва направо почергово іде порівняння двох сусідніх елементів. Якщо вони не впорядковані між собою, то міняються місцями. В базовому алгоритмі проходження масиву та чергове впорядкування повторюються n-1 раз.

1.

Максимальний елемент одразу ж опиняється в кінці масиву,тобто на наступному к

5 3 4 9 1 7 6

році ми можемо анализувати на один елемент менше;

f=true фіксація наявності пересувань;

k=6- місце останнього пересування;

3,5

4,5

9,1

7,9

6,9

2.

3 4 5 1 7 6 9

f=true

k=5

1,5

6,7

3.

3 4 1 5 6 7 9

f=true

k=2

1,4

4.

3 1 4 5 6 7 9

f=true

k=1

1,3

5.

1 3 4 5 6 7 9

f=false

6

3 1 4 5 6 7 9

.

f=false

а) алгоритм базового методу

|exchenge_1

1 n

A є R

B є R

k,i,n є N

введення n,A

-1

(k=n-1,1)

(i=1,k)

(A[i]>A[i+1])

B:=A[i]

A[i]:=A[i+1]

A[i+1]:=B

виведення A

|end

б) модіфікований алгоритм бульбашкового сортування

Процес пересування повторюється циклічно по всьому масиву(за вийнятком останніх елементів), поки всі елементи не будуть впорядковані. Таким чином, на кожному кроці слід фіксувати наявність пересувань. Їх відсутність є оизнакою кінця сортування (тобто обов'язкова наявність "холостого проходження" - коли ні жодне пересування не буде виконано). Для фіксації наявності пересувань використовують логічну змінну f, що, наприклад, приймає значення true якщо є пересування і false - в іншому випадку.

|exchenge_2

A є R

F є R

B є B

k,i,n є N

введення n,A

F:=true

k:=n-1

(F=true)

F:=false

(i=1,k)

(A[i]>A[i+1])

B:=A[i]

A[i]:=A[i+1]

A[i+1]:=B

F:=true

k:=k-1

виведення A

|end

в) Якщо фіксувати не тільки наявність пересувань, але і місце останього пересування, можна істотньо покращати алгоритм. Кінець сортування досягається тоді, коли останнє пересування було виконане у першій позиції (k=1 - місце останнього пересування), тобто мінімальний елемент потрапив на своє місце (зникає одне холосте проходження).

|exchenge_3

1 n

A є R

B є R

k,i,n,r є N

введення n,A

r:=n-1

(r>1)

k:=1

(i=1,r)

(A[i]>A[i+1])

B:=A[i]

A[i]:=A[i+1]

A[i+1]:=B

k:=і

r:=k-1

виведення A

|end

г) шейкерне пересування

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

L=1 сортування зліва направо R=n L,R – відповідно ліва та права

1 . межа невідсортованої частини

4 9 3 2 5 1 6

3,9

2,9

5,9

1,9

6,9

R=k

k- номер останнього переміщення, k=6 =6

L=1 R=6

2. сортування справа наліво

4 3 2 5 1 6 9

1,5

1,2

1,3

1,4

L=k+1

k=1 =2

L=2 R=6

1 4 3 2 5 6 9

3.

3,4

2,4

R=k

k=3 =3

L=2 R=3

1 3 2 4 5 6 9

4.

2,3

L=k+1

k=2 =3 L=R- кінець сортування

| exchenge_4

A є R

B є R

k,i,n,L,R є N

введення A,n

L:=1; R:=n; k:=1

(R>L)

(i=L,R-1)

(A[i]>A[i+1])

B:=A[i] сортування зліва

A[i]:=A[i+1] зміщення правої межі

A[i+1]:=B

k:=i

R:=k

-1

(i=R-1,L)

(A[i]>A[i+1])

B:=A[i] сортування справа

A[i]:=A[i+1] зміщення лівої межі

A[i+1]:=B

k:=i

L:=k+1

виведення A

|end

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