Пузырьковая сортировка оптимизированная - Pascal

Узнай цену своей работы

Формулировка задачи:

Дан код, нужно сделать линейный поиск (он уже есть) с конца массива. Метод сортировки - пузырьковая оптимизированная. Вот сам код:
const
  n=20;
type
  vector = array[1..n] of integer;
var
  a:vector;
  k:integer;
 
{Процедура заполняет массив случайными целыми числами}
procedure FillVector(var a:vector; n: integer);
var
  i:integer;
begin {FillVector}
  randomize;
  for i:=1 to n do
  a[i] := random(100);
end;{FillVector}
 
{Процедура печатает на экран массив}
procedure PrintVector(a:vector; n: integer);
var
i:integer;
begin {PrintVector}
for i:=1 to n do
write(a[i]:4);
writeln;
end;{PrintVector}
 
{Процедура призводит линейный поиск элемента со значением k в массиве a}
procedure SearchVector(a:vector; n,k: integer);
var
i:integer;
begin {SearchVector} 
i:=n;
while (i>=1) and (a[i]<>k) do
dec(i);
if i>=1 then
writeln ('Найден элемент с индексом ', i)
else
writeln ('Элемент не найден');
end;{SearchVector}
 
procedure SortVectorBySelect(var a:Vector; n:integer); 
var
i, j, x: integer;
begin
for i:=n-1 downto 1 do
begin 
x:=a[i]; {Значение вставляемого элемента}
j:=i;
{поиск места вставки и сдвиг}
while (ja[j+1]) do
begin
a[j]:=a[j+1];
j:=j+1;
end;
a[j]:=x;{Вставка}
end;
end;
 
begin
FillVector(a, n);
 
writeln ('Исходный массив');
PrintVector(a, n);
 
writeln('введите искомое значение');
readln(k);
SearchVector(a, n, k);
 
SortVectorBySelect(a, n);
writeln ('Отсортированный массив');
PrintVector(a, n);
end.
А вот код пузырьковой (оптимизированной сортировки):
R:=n-1;
 repeat
 t:=0; {место последнего обмена}
  for i:=1 to R do
  if a[i] > a[i+1] then 
   begin
     swap (a[i], a[i+1]);
     t:=i;
   end;
R:=t {перенос R в момент обмена}
until t=0; {до тех пор, пока не будет обменов}
Его нужно вставить и видоизменить, в верхний код, поскольку в данной сортировки поиск идёт с начало массива

Решение задачи: «Пузырьковая сортировка оптимизированная»

textual
Листинг программы
{Процедура производит линейный поиск элемента со значением k в массиве a}
procedure SearchVectorAsc(a: vector; n, k: Integer);
begin {SearchVectorAsc} 
  while (n>=1) and (a[i]>k) do Dec(n);
  if (n>=1) and (a[i]=k)
  then WriteLn('Найден элемент с индексом ', n)
  else WriteLn('Элемент не найден');
end;  {SearchVectorAsc}

Объяснение кода листинга программы

  1. Создается процедура SearchVectorAsc для выполнения линейного поиска элемента в массиве.
  2. Входные параметры процедуры:
    • Массив a (vector),
    • Число n (Integer),
    • Значение k (Integer).
  3. В процедуре выполняется цикл while, в котором проверяется условие: n больше или равно 1 и значение a[i] больше k. При этом уменьшается значение n.
  4. После завершения цикла происходит проверка, что n больше или равно 1 и значение a[i] равно k.
    • Если условие выполняется, выводится сообщение Найден элемент с индексом и значение n.
    • В противном случае выводится сообщение Элемент не найден.
  5. Завершается процедура SearchVectorAsc.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.444 из 5
Похожие ответы