Программа методом двоичного включения - Pascal ABC
Формулировка задачи:
Подскажите, пожалуйста
Использование идеи двоичного поиска позволяет значительно улучшить ал*горитм сортировки массива методом простого включения. Учитывая, что готовая последовательность, в которую надо вставить элемент, является упорядоченной,
можно методом деления пополам определять позицию включения нового элемен*та в нее. Такой модифицированный алгоритм сортировки называется методом дво*ичного включения. Написать программу, реализующую этот метод.
Решение задачи: «Программа методом двоичного включения»
textual
Листинг программы
- var a:array[1..100] of integer;
- n,i,j,m,l,r,x:integer;
- begin
- write('Введите размер массива от 2 до 100 n=');
- readln(n);
- randomize;
- writeln('Исходный массив');
- for i:=1 to n do
- begin
- a[i]:=random(100);
- write(a[i]:4);
- end;
- writeln;
- for i:=2 to n do
- begin
- x:=a[i];//запомним очередной элемент
- l:=1; //девый край
- r:=i; //правый край
- while l<r do //пока левый меньше правого
- begin
- m:=(l+r) div 2; //середина
- if a[m]<x then l:=m+1 else r:=m; //если средний меньше текущего
- //левый ставим впереди среднего,
- //иначе правый в середину
- end;
- for j:=i downto r+1 do a[j]:=a[j-1]; //сдвигаем отсортированную часть на 1 вправо
- a[r]:=x;//текущий ставим в позицию правого
- end;
- writeln('Отсортированный массив');
- for i:=1 to n do
- write(a[i]:4);
- end.
Объяснение кода листинга программы
- Создается переменная
a
типаarray[1..100] of integer
. Это означает, что будет создан массив из 100 чисел типаinteger
. - Задается переменная
n
, которая будет использоваться для хранения размера массива. - Вызывается функция
randomize
, чтобы инициализировать генератор случайных чисел. - Выводится сообщение
Введите размер массива от 2 до 100 n=
. - Пользователю предлагается ввести размер массива от 2 до 100.
- Введенное значение сохраняется в переменной
n
. - Генератор случайных чисел инициализируется.
- Выводится сообщение
Исходный массив
. - Запускается цикл
for
, который выполняетсяn
раз. - Внутри цикла создаются переменные
i
,j
,m
,l
,r
,x
. - Переменная
i
инициализируется значением 1. - Переменная
j
инициализируется значениемn+1
. - Переменная
m
инициализируется как(i+j)
деленное на 2. - Переменная
l
инициализируется какmin(i, m)
. - Переменная
r
инициализируется какmax(i, m)
. - Запускается вложенный цикл
while
, который выполняется, покаl
меньшеr
. - Внутри вложенного цикла вычисляется средний элемент массива, сохраняя его в переменной
m
. - Проверяется, меньше ли средний элемент текущего элемента. Если это так, то
l
устанавливается равнымm+1
. Если же средний элемент больше текущего, тоr
устанавливается равнымm
. l
иr
сдвигаются вправо на 1, используя сдвигa[j]=a[j-1]
.- В конце вложенного цикла
while
переменнаяa[r]
устанавливается равной текущему элементу. - Выводится сообщение
Отсортированный массив
. - Запускается еще один цикл
for
, который выполняется от 1 доn
. - Внутри цикла выводится значение
a[i]
с помощью функцииwrite
. - Цикл
for
завершается. - Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д