СОРТУВАННЯ ЕЛЕМЕНТІВ
РЯДКА МЕТОДОМ БУЛЬБАШКИ
Цей метод ґрунтується на перестановці сусідніх чисел. Для впорядкування
чисел в рядку здійснюємо повторні проходи по рядку, кожного разу переміщаючи
найменший елемент частини масиву, що залишився, на початок.
Переміщення елементів рядка здійснюється таким чином: переглядаємо рядок
справа на ліво, порівнюючи пари сусідніх чисел; якщо числа в парі розміщені в
порядку зростання, то залишаємо їх без змін, а якщо в порядку спадання, то
міняємо їх місцями.
В результаті першого проходу найменше число буде поставлене на початок
масиву. У другому проході такі операції виконуються над елементами з останнього
до другого, у третьому проході такі операції виконуються над елементами з
останнього до третього, і так далі. Впорядкування рядка буде закінчено, якщо
при проході рядка не виконуватиметься жодної перестановки елементів рядка. Факт
перестановки фіксується за допомогою допоміжної змінної prap, яка на початку має значення 0 і
набуває значення 1 тоді, коли
виконуватиметься перестановка в якій-небудь парі. Прапорець prap, ще використовується з
метою економії часу в тому випадку, коли частина рядка наперед впорядкована.
Програмa на мові PASCAL для розташування 10-ти чисел в порядку зростання,
від найменшого числа до найбільшого числа методом бульбашки.
Program Bubblesort;
CONST {оголошується
перелік усіх постійних величин}
n=10; {оголошується постійна
величина, це кількість чисел у рядку, їх буде рівно 10}
TYPE {оголошується
тип (MASSIV)рядок цілих чисел
і кількість місць для них від 1 до n в діапазоні integer }
MASSIV=array[1..n] of integer;
VAR {оголошується перелік усіх змінних величин, що використовуються у
програмі}
i, j, adop, prap: longint; {оголошуються довгі цілі змінні величини, що будуть
використовуватися у програмі}
A: Massiv; {оголошується рядок із змінних величин,
що будуть використовуватися у програмі}
BEGIN {оголошується
рядок початок виконання алгоритмічних дії програми}
writeln('Введіть елементи рядка');
for i:=1 to n do {цикл з
лічильником у зростаючому порядку для присвоєння
усім десяти елементам рядка
А[i] довільних чисел }
begin
writeln;
write('À[',i,'] = '); {попереджає і записує на
моніторі чергове місце для введення з клавіатури поточного числа рядка}
read (A[i]); { виконується 10 разове введення з клавіатури на поточне місце рядка нового числа }
end; {оголошується
кінець виконання циклу для введення рядка із десяти цілих чисел }
writeln('Рядок чисел до сортування');
{оголошується про запис на моніторі рядка із
десяти цілих чисел }
writeln;
for i:=1
to n do writeln(a[i]:5);
i:=2;
repeat {оголошується про цикл з після умовою для сортування рядка із десяти цілих
чисел }
prap:=0;
for j:=n downto i do {оголошується
про цикл з лічильником у зворотному
напрямі для сортування рядка цілих
чисел }
begin
if A[j]<A[j-1] then {оголошується неповне розгалуження для порівняння двох сусідніх цілих
чисел }
begin
adop:=A[j-1]; {якщо вірне порівняння(для порядку
зростання) двох сусідніх цілих чисел , то відбувається їх обмін}
A[j-1]:=A[j];
A[j]:=adop;
prap:=1; {якщо фіксується, що відбувався
обмін чисел}
end;
end;
i:=1+ i; {це параметр циклу з лічильником у зворотному напрямі, потрібний для
обмеження несортованої кількості цілих чисел
}
until prap=0; {якщо виконується умова prap=0, не було обміну
двох чисел, то цикл завершується}
writeln; {оголошується про запис на моніторі рядка із
десяти цілих чисел, що розташовані в порядку зростання }
writeln('Рядок чисел після сортування');
writeln;
for i:=1 to n do writeln('A[',i,'] = ', A[i],';
'); {цикл з лічильником у зростаючому порядку для виводу на монітор усіх
десяти елементів рядка А[i] в порядку зростання }
writeln;
end.
Немає коментарів:
Дописати коментар