Пузырьковая сортировка оптимизированная - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д