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