Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 09.12.2013, 23:02   #1 (permalink)
Cassan
Member
 
Регистрация: 09.12.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Exclamation Сортировка 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.
Cassan вне форума   Ответить с цитированием

Старый 09.12.2013, 23:02
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

На форуме уже кто то создавал подобные обсуждения

Turbo Pascal
Turbo Pascal
Turbo Pascal

Старый 10.12.2013, 12:15   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Cassan Посмотреть сообщение
Применялся улучшенный метод: быстрая сортировка Хоара
О, Боже - этого еще не хватало! И откуда среди преподов появляются подобные извращенцы? Ладно, будем разбираться. Быстро не обещаю.
Vladimir_S вне форума   Ответить с цитированием
Старый 10.12.2013, 20:23   #3 (permalink)
Cassan
Member
 
Регистрация: 09.12.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

да не говорите, уже всё перепробовали, но всё неправильно.
советовали сделать как-то без рекурсии, но ничего не понятно
Спасибо, что отозвались, буду ждать вашей помощи!
Cassan вне форума   Ответить с цитированием
Старый 10.12.2013, 20:27   #4 (permalink)
Cassan
Member
 
Регистрация: 09.12.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

может вы как-то по своему сможете реализовать эту процедуру, по-проще.
Cassan вне форума   Ответить с цитированием
Старый 10.12.2013, 20:35   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Cassan Посмотреть сообщение
может вы как-то по своему сможете реализовать эту процедуру, по-проще.
"Попроще" - это разве что без Хоара, но ведь Вам нужно именно Хоаром? Даже и не знаю, когда время найду, тут дело серьёзное.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 10.12.2013, 20:50   #6 (permalink)
Cassan
Member
 
Регистрация: 09.12.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

да вот "счастье" такое, ну ладно как время будет
Ещё вопрос нам учитель просто задал сделать один базовый метод сортировки и один от него улучшенный, мы сделали базовую пузырьковая, а улучшенная получается быстрая сортировка, быстрая это и есть Хоара?(нам просто так объясняли)
Cassan вне форума   Ответить с цитированием
Старый 10.12.2013, 22:30   #7 (permalink)
Cassan
Member
 
Регистрация: 09.12.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

А может выбрать пирамидальную она легче или нет, как вы посоветуете?
Cassan вне форума   Ответить с цитированием
Старый 14.12.2013, 10:59   #8 (permalink)
Cassan
Member
 
Регистрация: 09.12.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Даже и не знаю, когда время найду, тут дело серьёзное.
Спасибо, но уже помощь не требуется, разобрались. Теперь будем с пирамидальной разбираться.
Cassan вне форума   Ответить с цитированием
Старый 14.12.2013, 11:05   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Cassan Посмотреть сообщение
Спасибо, но уже помощь не требуется, разобрались. Теперь будем с пирамидальной разбираться.
Ну вот, а я уж было решил на выходных поиграть с этой задачкой... Впрочем, конечно, всегда приятно, когда люди сами справляются, так что - мои поздравления!
P.S. Впрочем, не исключено, что всё-таки повожусь с этим Хоаром. Уже для себя. Как говорил почтальон Печкин, "в порядке повышения образованности".
Vladimir_S вне форума   Ответить с цитированием
Старый 14.12.2013, 11:25   #10 (permalink)
Cassan
Member
 
Регистрация: 09.12.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

а с пирамидальной сортировкой не хотите повозиться?
Cassan вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 13:20.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.