неділя, 14 вересня 2014 р.

Сортуванння елементів рядка













СОРТУВАННЯ  ЕЛЕМЕНТІВ  РЯДКА  МЕТОДОМ  БУЛЬБАШКИ
Цей метод ґрунтується на перестановці сусідніх чисел. Для впорядкування чисел в рядку здійснюємо повторні проходи по рядку, кожного разу переміщаючи найменший елемент частини масиву, що залишився, на початок.
Переміщення елементів рядка здійснюється таким чином: переглядаємо рядок справа на ліво, порівнюючи пари сусідніх чисел; якщо числа в парі розміщені в порядку зростання, то залишаємо їх без змін, а якщо в порядку спадання, то міняємо їх місцями.
В результаті першого проходу найменше число буде поставлене на початок масиву. У другому проході такі операції виконуються над елементами з останнього до другого, у третьому проході такі операції виконуються над елементами з останнього до третього, і так далі. Впорядкування рядка буде закінчено, якщо при проході рядка не виконуватиметься жодної перестановки елементів рядка. Факт перестановки фіксується за допомогою допоміжної змінної 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.


Немає коментарів:

Дописати коментар