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