• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Сортировка Turbo Pascal

  • Автор темы Автор темы Cassan
  • Дата начала Дата начала

Cassan

Новые
Регистрация
9 Дек 2013
Сообщения
18
Реакции
0
Баллы
0
Сортировка Turbo Pascal

Помогите, пожалуйста чтобы программа заработала правильно.
Условие: Дан массив C(N). Преобразовать массив, упорядочив первую его половину элементов по возрастанию, а вторую по убыванию.(Известно, что N-четное).
Применялся улучшенный метод: быстрая сортировка Хоара, но уже замучались с этим, не запускается и ошибки. Главное чтобы правильно сортировала по условию.

Код:
Uses Crt;
Const		N = 50;
Type 		T_Mas = Array [1..N] of Integer;
Var		Mas	: T_Mas;
		Kol	: Integer;

				
Procedure Count (Var Kol:Integer);
{Процедура определения размерности массива}
Var		IOR	: Word;
Begin
Write('Введите размерность массива: ');
	Repeat
		{$I-} ReadLn(Kol); {$I+}
		IOR := IOResult;
		If odd(IOR) or (Kol>N) Then
			WriteLn('Ошибка. Повторите ввод.')
	Until (Kol<=N) and (IOR=0)
End;


Procedure Filling (Kol:Integer; Var A: T_Mas);
{Процедура заполнения массива}
Var I : Integer;
Begin
	Randomize;
	For I := 1 To Kol Do A[I] := Random(N)
End;


Procedure Print (Kol:Integer; A: T_Mas);
{Процедура вывода массива}
Var I : Integer;
Begin
	For I:=1 to Kol do Write (A[I], ' ')
End;

procedure quicksort1(var a: T_Mas; Lo,Hi: integer);

  procedure sort1(kol,l,r: integer);
  var
    i,j,x,y,k: integer;
begin
k:= Kol div 2;
for i:=1 to k-1 do
  begin
    i:=l; j:=r; x := a[(r+l) div 2];
    repeat
      while a[i]<x do i:=i+1; { a[i] > x  - сортировка по убыванию}
      while x<a[j] do j:=j-1; { x > a[j]  - сортировка по убыванию}
      if i<=j then
      begin
        if a[i] > a[j] then {это условие можно убрать} {a[i] < a[j] при сортировке по убыванию}
        begin
          y:=a[i]; a[i]:=a[j]; a[j]:=y;
        end;
        i:=i+1; j:=j-1;
      end;
    until i>=j;
    if l<j then sort1(l,j);
    if i<r then sort1(i,r);
end;
  end; {sort}

  procedure sort2(kol,l, r : Integer);
  Var
    i, j, x, y, k: Integer;
begin
k:= Kol div 2;
for i:=1 to k-1 do
  Begin
     i:=l; j:=r; x := a[(r+l) div 2];
    repeat
      while a[i]>x do i:=i+1; { a[i] > x  - сортировка по убыванию}
      while x>a[j] do j:=j-1; { x > a[j]  - сортировка по убыванию}
      if i<=j then
      begin
        if a[i] < a[j] then {это условие можно убрать} {a[i] < a[j] при сортировке по убыванию}
        begin
          y:=a[i]; a[i]:=a[j]; a[j]:=y;
        end;
        i:=i+1; j:=j-1;
      end;
    until i>=j;
    if l<j then sort2(l,j);
    if i<r then sort2(i,r);
end;
  End;

begin {quicksort};
  sort1(Lo,Hi);
  Lo := 11;
  Hi := 20;
  Sort2(Lo, Hi)
end; {quicksort}

Begin
	ClrScr;
	Count(Kol);
	Filling(Kol, Mas);
	WriteLn('Исходный массив'); Print (Kol, Mas);
	quickSort1(Mas, 1, 10);
	WriteLn;
	WriteLn('Отсортированный массив'); Print (Kol, Mas);
	Repeat until KeyPressed
End.
 
Применялся улучшенный метод: быстрая сортировка Хоара
О, Боже - этого еще не хватало! И откуда среди преподов появляются подобные извращенцы? Ладно, будем разбираться. Быстро не обещаю.
 
да не говорите, уже всё перепробовали, но всё неправильно.
советовали сделать как-то без рекурсии, но ничего не понятноtehno015
Спасибо, что отозвались, буду ждать вашей помощи!
 
может вы как-то по своему сможете реализовать эту процедуру, по-проще:dog:.
 
может вы как-то по своему сможете реализовать эту процедуру, по-проще:dog:.
"Попроще" - это разве что без Хоара, но ведь Вам нужно именно Хоаром? Даже и не знаю, когда время найду, тут дело серьёзное.
 
да вот "счастье" такое, ну ладно как время будет
Ещё вопрос нам учитель просто задал сделать один базовый метод сортировки и один от него улучшенный, мы сделали базовую пузырьковая, а улучшенная получается быстрая сортировка, быстрая это и есть Хоара?(нам просто так объясняли)
 
А может выбрать пирамидальную она легче или нет, как вы посоветуете?
 
Спасибо, но уже помощь не требуется, разобрались. Теперь будем с пирамидальной разбираться.
Ну вот, а я уж было решил на выходных поиграть с этой задачкой... :D Впрочем, конечно, всегда приятно, когда люди сами справляются, так что - мои поздравления!
P.S. Впрочем, не исключено, что всё-таки повожусь с этим Хоаром. Уже для себя. Как говорил почтальон Печкин, "в порядке повышения образованности".
 
а с пирамидальной сортировкой не хотите повозиться?:tehnari_ru_942:
 
Назад
Сверху