Поиск 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.

Объяснение кода листинга программы

  1. В начале кода подключается библиотека crt, которая обеспечивает работу с консолью.
  2. Объявляются переменные a, n и k типа array[1..15] of integer, то есть массив из 15 целых чисел.
  3. Создается процедура Find, которая принимает один аргумент k типа integer.
  4. В процедуре объявляются переменные L, R, i, j, w и x типа integer.
  5. Задается начальное значение для L и R: L=1, R=n (где n - это значение переменной n).
  6. Задается начальное значение для i и j: i=L, j=R.
  7. Запускается цикл while, который выполняется до тех пор, пока L меньше R-1.
  8. Внутри цикла выполняется сравнение a[i]<x. Если это условие выполняется, то i увеличивается на 1, а j уменьшается на 1, пока a[i]<x. Затем выполняется аналогичное сравнение для j. Если оба условия выполняются, то значения a[i], a[j] и a[i+1] меняются местами.
  9. После выполнения всех обменов значениями переменных i и j обновляются значения переменных L и R: если i меньше j, то L=i, а если k меньше i, то R=j.
  10. После завершения цикла while выполняется проверка: если j меньше k, то значение переменной L обновляется значением i. Если k меньше i, то значение переменной R обновляется значением j.
  11. Выводится сообщение k от 1 до, n,k=.
  12. Пользователю предлагается ввести значение k.
  13. Выводится значение a[k].
  14. Запрашивается ввод следующего значения k.
  15. Цикл повторяется до тех пор, пока k не станет равным n.
  16. Выводится сообщение k от 1 до, n,' k='.
  17. Выводится значение a[k].
  18. Программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы