Подсчитать количество присваиваний и количество сравнений при сортировке - Pascal
Формулировка задачи:
Составить программу, которая для массива, заполненного случайными целыми числами, проводит сортировку по неубыванию методом вставки (включения). Подсчитать количество присваиваний и количество сравнений при сортировке. Для проверки работы метода сортировки следует использовать массив из примера,разобранного в «Методических указаниях», выводя на экран весь массив целиком на каждом походе алгоритма.
Решение задачи: «Подсчитать количество присваиваний и количество сравнений при сортировке»
textual
Листинг программы
- const ARRAY_SIZE = 10;
- type array_t = array[1..ARRAY_SIZE] of integer;
- procedure print( const a: array_t );
- var
- i: integer;
- begin
- write('array(',ARRAY_SIZE,'): ');
- for i:=1 to ARRAY_SIZE do
- write( a[i] :5 );
- writeln;
- end;
- const DEV_MODE = true;
- var
- a: array_t;
- i,j,tmp: integer;
- eCount: integer = 0;
- aCount: integer = 0;
- begin
- for i:=1 to ARRAY_SIZE do
- a[i] := random(-100 , 100);
- print(a);
- for j:= 2 to ARRAY_SIZE do begin
- eCount := eCount + 1;
- aCount := aCount + 1;
- tmp := a[j];
- i := j - 1;
- aCount := aCount + 2;
- while (i > 0) and (a[i] > tmp) do begin
- if ( i>0 ) then eCount := eCount + 1 else eCount := eCount + 2;
- a[i+1] := a[i];
- if DEV_MODE then print(a);
- i := i - 1;
- aCount := aCount + 2;
- end;
- a[i+1] := tmp;
- aCount := aCount + 1;
- if DEV_MODE then print(a);
- end;
- writeln( 'Кол-о сравнений: ',eCount );
- writeln( 'Кол-о присваиваний: ',aCount );
- print(a);
- end.
Объяснение кода листинга программы
- Создается константа ARRAY_SIZE, которая определяет размер массива в 10 элементов.
- Создается тип данных array_t, который представляет собой массив из 10 целых чисел.
- Создается процедура print, которая принимает массив в качестве параметра и выводит его содержимое на экран.
- Создается константа DEV_MODE, которая определяет режим отладки.
- Создается переменная a, которая представляет собой массив из 10 целых чисел.
- Создается счетчик eCount для подсчета количества сравнений и присваиваний.
- Создается счетчик aCount для подсчета количества присваиваний.
- Запускается цикл for, который заполняет массив случайными числами от -100 до 100.
- Выводится массив на экран с помощью процедуры print.
- Запускается второй цикл for, который повторяется для каждого элемента массива, начиная со второго.
- Внутри цикла увеличивается счетчик eCount на единицу каждый раз, когда происходит сравнение двух элементов массива.
- Если текущий элемент больше следующего, то увеличивается счетчик aCount на две, так как происходит присваивание временного значения элемента.
- После завершения внутреннего цикла, значение элемента, который был вставлен в позицию i+1, присваивается обратно в позицию i.
- Выводится количество сравнений на экран.
- Выводится количество присваиваний на экран.
- Выводится массив на экран в последний раз.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д