Поиск k-й порядковой статистики массива с использованием метода Хоара - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

3. Поиск k-й порядковой статистики массива с использованием метода Хоара. Замеч. Допускается использование любого языка программирования, любого компилятор и любой среды. Просьба указывать используемый компилятор. Помогите гуманитарию!!!

Решение задачи: «Поиск k-й порядковой статистики массива с использованием метода Хоара»

textual
Листинг программы
  1. uses crt;
  2. var a:array[1..15] of integer;
  3.     n:integer;
  4. procedure Find(k: integer);
  5. var
  6. L,R,i,j: integer;
  7. w,x: integer;
  8. begin
  9.  L:=1; R:=N;
  10.  while L<R-1 do
  11.   begin
  12.    x:=a[k];
  13.    i:=L;
  14.    j:=R;
  15.    repeat
  16.     while a[i]<x do i:=i+1;
  17.     while x<a[j] do j:=j-1;
  18.     if i<=j then
  19.      begin
  20.       w:=a[i];
  21.       a[i]:=a[j];
  22.       a[j]:=w;
  23.       i:=i+1;
  24.       j:=j-1;
  25.      end;
  26.    until i>j;
  27.    if j<k then L:=i;
  28.    if k<i then R:=j;
  29.   end;
  30. end;
  31. var i,k:byte;
  32. begin
  33. clrscr;
  34. randomize;
  35. n:=15;
  36. for i:=1 to n do
  37.  begin
  38.   a[i]:=random(50);
  39.   write(a[i]:3);
  40.  end;
  41. writeln;
  42. repeat
  43. write('k от 1 до ',n,' k=');
  44. readln(k);
  45. until k in [1..n];
  46. Find(k);
  47. write(a[k]);
  48. readln
  49. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы