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