Поиск k-й порядковой статистики массива с использованием метода Хоара - Turbo Pascal
Формулировка задачи:
3. Поиск k-й порядковой статистики массива с использованием метода Хоара.
Замеч. Допускается использование любого языка программирования, любого компилятор и любой среды. Просьба указывать используемый компилятор.
Помогите гуманитарию!!!
Решение задачи: «Поиск k-й порядковой статистики массива с использованием метода Хоара»
textual
Листинг программы
uses crt;
var a:array[1..15] of integer;
n:integer;
procedure Find(k: integer);
var
L,R,i,j: integer;
w,x: integer;
begin
L:=1; R:=N;
while L<R-1 do
begin
x:=a[k];
i:=L;
j:=R;
repeat
while a[i]<x do i:=i+1;
while x<a[j] do j:=j-1;
if i<=j then
begin
w:=a[i];
a[i]:=a[j];
a[j]:=w;
i:=i+1;
j:=j-1;
end;
until i>j;
if j<k then L:=i;
if k<i then R:=j;
end;
end;
var i,k:byte;
begin
clrscr;
randomize;
n:=15;
for i:=1 to n do
begin
a[i]:=random(50);
write(a[i]:3);
end;
writeln;
repeat
write('k от 1 до ',n,' k=');
readln(k);
until k in [1..n];
Find(k);
write(a[k]);
readln
end.
Объяснение кода листинга программы
- В начале кода подключается библиотека crt, которая обеспечивает работу с консолью.
- Объявляются переменные a, n и k типа array[1..15] of integer, то есть массив из 15 целых чисел.
- Создается процедура Find, которая принимает один аргумент k типа integer.
- В процедуре объявляются переменные L, R, i, j, w и x типа integer.
- Задается начальное значение для L и R: L=1, R=n (где n - это значение переменной n).
- Задается начальное значение для i и j: i=L, j=R.
- Запускается цикл while, который выполняется до тех пор, пока L меньше R-1.
- Внутри цикла выполняется сравнение a[i]<x. Если это условие выполняется, то i увеличивается на 1, а j уменьшается на 1, пока a[i]<x. Затем выполняется аналогичное сравнение для j. Если оба условия выполняются, то значения a[i], a[j] и a[i+1] меняются местами.
- После выполнения всех обменов значениями переменных i и j обновляются значения переменных L и R: если i меньше j, то L=i, а если k меньше i, то R=j.
- После завершения цикла while выполняется проверка: если j меньше k, то значение переменной L обновляется значением i. Если k меньше i, то значение переменной R обновляется значением j.
- Выводится сообщение
k от 1 до, n,k=. - Пользователю предлагается ввести значение k.
- Выводится значение a[k].
- Запрашивается ввод следующего значения k.
- Цикл повторяется до тех пор, пока k не станет равным n.
- Выводится сообщение
k от 1 до, n,' k='. - Выводится значение a[k].
- Программа завершается.