Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
30
Добавлен:
07.02.2016
Размер:
150.02 Кб
Скачать

4.5.2. Метод вибору.

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

var a: array [1..100] of real;

i,l,k,n:integer;

min: real;

begin

writeln('вв.n');

readln(n);

for i:=1 to n do

read(a[i]);

writeln;

for i:=1 to n-1 do

begin

min:=a[i]; l:=i;

for k:=i to n do

if a[k]<min then

begin

min:=a[k];

l:=k;

end;

a[l]:=a[i];

a[i]:=min;

end;

for i:=1 to n do

write(a[i]:5:3);

readln;

end.

Трасування цього методу:

значення i

значення a[i]

значення k

значення min

значення L

значення масиву

1

9

1

9

1

9, 7, 4, 2, 6

1

9

2

9

2

9, 7, 4, 2, 6

1

9

3

4

3

9, 7, 4, 2, 6

1

9

4

2

4

9, 7, 4, 2, 6

1

9

5

2

4

9, 7, 4, 2, 6

1

4

2, 7, 4, 9, 6

2

7

2

7

2

2, 7, 4, 9, 6

2

7

3

4

3

2, 7, 4, 9, 6

2

7

4

4

3

2, 7, 4, 9, 6

2

7

5

4

3

2, 7, 4, 9, 6

2

3

2, 4, 7, 9, 6

3

7

3

7

3

2, 4, 7, 9, 6

3

7

4

7

3

2, 4, 7, 9, 6

3

7

5

6

5

2, 4, 7, 9, 6

3

5

2, 4, 6, 9, 7

4

9

4

9

4

2, 4, 6, 9, 7

4

9

5

2, 4, 6, 9, 7

4

2, 4, 6, 7, 9

Кількість порівнянь в останньому методі не менше, ніж у попередньому, але операцій обміну набагато менше, а це є найповільніша операція в ЕОМ. Взагалі, кількість порівнянь елементів - K=(n2-n)/2. Для обміну елементів приведемо мінімальне (елементи впорядковані) та максимальне (елементи розташовані в оберненому порядку) значення:

Smin=3*(n-1), Smax=n2/4+3*(n-1).

4.5.3. Сортування за допомогою ознаки (прапорця).

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

var a: array [1..100] of real;

i,n:integer;

f: boolean; {прапорець}

begin

writeln('вв.n');

readln(n);

for i:=1 to n do

read(a[i]);

writeln;

repeat

f:=false;

for i:=1 to n-1 do

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

begin

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

A[i+1]:=x; f:= true;

end;

until f=false;

for i:=1 to n do

write(a[i]:5:3);

readln;

end.

Для цього алгоритму кількість порівнянь залежить від виду масиву. Мінімальна кількість порівнянь буде дорівнювати n-1, якщо масив впорядкований. Так, наприклад, при наступних значеннях масиву кількість порівнянь дорівнює 4.

значення i

значення a[i]

значення a[i+1]

значення f

значення масиву

1

3

6

false

3, 6, 8, 12, 15

2

6

8

false

3, 6, 8, 12, 15

3

8

12

false

3, 6, 8, 12, 15

4

12

15

false

3, 6, 8, 12, 15

В найгіршому випадку виконується 20 порівнянь.

значення i

значення a[i]

значення a[i+1]

значення f

значення масиву

1

9

7

false

9, 7, 4, 2, 6

2

9

4

true

7, 9, 4, 2, 6

3

9

2

true

7, 4, 9, 2, 6

4

9

6

true

7, 4, 2, 9, 6

true

7, 4, 2, 6, 9

1

7

4

false

7, 4, 2, 6, 9

2

7

2

true

4, 7, 2, 6, 9

3

7

6

true

4, 2, 7, 6, 9

4

7

true

4, 2, 6, 7, 9

true

4, 2, 6, 7, 9

1

4

2

false

4, 2, 6, 7, 9

2

4

6

true

2, 4, 6, 7, 9

3

6

7

true

2, 4, 6, 7, 9

4

7

9

true

2,4, 6, 7, 9

true

2, 4, 6, 7, 9

1

2

4

false

2, 4, 6, 7, 9

2

4

6

false

2, 4, 6, 7, 9

3

6

7

false

2, 4, 6, 7, 9

4

7

9

false

2, 4, 6, 7, 9

2, 4, 6, 7, 9

Соседние файлы в папке конспект лекцій 1 паск