В
Все
У
Українська література
Г
Геометрия
Д
Другие предметы
Э
Экономика
Г
География
О
ОБЖ
М
Математика
М
МХК
Х
Химия
Қ
Қазақ тiлi
Л
Литература
У
Українська мова
О
Обществознание
Ф
Физика
А
Английский язык
А
Алгебра
И
История
Б
Беларуская мова
Б
Биология
М
Музыка
П
Право
И
Информатика
П
Психология
В
Видео-ответы
Н
Немецкий язык
Ф
Французский язык
О
Окружающий мир
Р
Русский язык
dega7981
dega7981
16.05.2021 09:49 •  Информатика

Написать программу. 3. упорядочить массив по возрастанию ( по убыванию)

Ответ:
лол1570
лол1570
30.08.2020 22:28
//Метод быстрой сортировки
//Pascal ABC.NET v3.1 сборка 1172

//По возрастанию
Const
n=55;

type
ty=array[1..n] of integer;

Var
ar:ty;
s:integer;

procedure quicksort(l,r:integer);
var i,j,x,temp:integer;
 begin
  i:=l; //левый конец
  j:=r; //правый конец
  x:=ar[random(r-l+1)+l];
   repeat
    while ar[i]<x do inc(i); //пока выбранный элемент больше всех, что левее его(всё норм), увеличивать индекс
    while x<ar[j] do dec(j); //пока выбранный элемент меньше всех, что правее его(всё норм), уменьшать индекс
    if i<=j then //если левый индекс меньше или равен правому-продолжать
     begin
        temp:=ar[i];
        ar[i]:=ar[j];
        ar[j]:=temp;
        inc(i); //чтобы не запустить бесконечную рекурсию
        dec(j);
     end;
    until i>=j;
  if l<j then quicksort(l,i); //l-левый конец нового витка, j-правый
  if r>i then quicksort(i,r); //r-левый конец нового витка, i-правый
end;

begin
randomize;
writeln('First array:');
for s:=1 to n do
 begin
  ar[s]:=random(n);
  write(ar[s]:4);
 end;
quicksort(1,n);
writeln;
writeln('Final array:');
ar.println;
end.

//По убыванию
Const
n=55;

type
ty=array[1..n] of integer;

Var
ar:ty;
s:integer;

procedure quicksort(l,r:integer);
var i,j,x,temp:integer;
 begin
  i:=l; //левый конец
  j:=r; //правый конец
  x:=ar[random(r-l+1)+l];
   repeat
    while ar[i]>x do inc(i); //пока выбранный элемент больше всех, что левее его(всё норм), увеличивать индекс
    while x>ar[j] do dec(j); //пока выбранный элемент меньше всех, что правее его(всё норм), уменьшать индекс
    if i<=j then //если левый индекс меньше или равен правому-продолжать
     begin
        temp:=ar[i];
        ar[i]:=ar[j];
        ar[j]:=temp;
        inc(i); //чтобы не запустить бесконечную рекурсию
        dec(j);
     end;
    until i>=j;
  if l<j then quicksort(l,i); //l-левый конец нового витка, j-правый
  if r>i then quicksort(i,r); //r-левый конец нового витка, i-правый
end;

begin
randomize;
writeln('First array:');
for s:=1 to n do
 begin
  ar[s]:=random(n);
  write(ar[s]:4);
 end;
quicksort(1,n);
writeln;
writeln('Final array:');
ar.println;
end.
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?