Пузырьковая сортировка оптимизированная - 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}
Объяснение кода листинга программы
- Создается процедура
SearchVectorAscдля выполнения линейного поиска элемента в массиве. - Входные параметры процедуры:
- Массив
a(vector), - Число
n(Integer), - Значение
k(Integer).
- Массив
- В процедуре выполняется цикл
while, в котором проверяется условие: n больше или равно 1 и значение a[i] больше k. При этом уменьшается значение n. - После завершения цикла происходит проверка, что n больше или равно 1 и значение a[i] равно k.
- Если условие выполняется, выводится сообщение
Найден элемент с индексоми значение n. - В противном случае выводится сообщение
Элемент не найден.
- Если условие выполняется, выводится сообщение
- Завершается процедура
SearchVectorAsc.