Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2009, 20:16   #1
wild-weight
Новичок
Джуниор
 
Регистрация: 25.09.2009
Сообщений: 2
По умолчанию сортировка массива Методом Хоара (быстрой сортировкой)

Здравствуйте , прошу помочь разобраться с сортировкой хоара.
вот код из книги ( а не из инета с характерными опечатками в коде , из-за
которого ломаешь голову (наболело ж) ) ) .
выдает ошибку - переполнения стека (stack overflow )

Код:
program sru ;
uses crt;
var
e,n,count,z :integer ;
a :array [1..10] of integer ;

 procedure quicksort (l,r:integer );
   var
    i,j,x,y :integer ;
    begin
     i:=l ; r:=count ;
     x:=a[(1+r) div 2] ;
       while i<=j do
         begin
          while a[i]<x do i:=i+1 ;
          while x<a[j] do j:=j-1 ;
          if i<=j then
           begin
            y:=a[i] ;
            a[i]:=a[j] ;
            a[j]:=y ;
            i:=i+1; j:=j-1 ;
           end ;
         end;
       if 1<j then quicksort(l,j) ;
       if 1<r then quicksort(i,r) ;
      end;


begin
e:=11 ;
n:=1 ;
clrscr ;
write ('vvedite chislo el. massiva' ) ;
read (n) ;
for z:=1 to n do read (a[z]) ;
quicksort (1,n ) ;
n:=1 ;
for n:=1 to 10 do write (a[n])  ;

end.


вот , пока не совсем понятно как он сортировать будет скажем массив
10 9 8 7 6 7 8 9 10 .
помогите довести до ума , чтобы прога заработала !
буду очень благодарен )
все , пошел, сам подумаю )

Последний раз редактировалось SuperVisor; 26.09.2009 в 10:04.
wild-weight вне форума Ответить с цитированием
Старый 25.09.2009, 22:07   #2
anGeee
Пользователь
 
Аватар для anGeee
 
Регистрация: 18.11.2008
Сообщений: 94
По умолчанию

Вот, вроде бы, рабочий вариант Хоара
Код:
procedure sort(var m:t_mas);
  procedure recurs_sort(l, r: word);
  var i, j: word;
      x, t: integer;
  Begin
    i:=l; j:=r; x:=m[(l+r) div 2];
    repeat
      while m[i]<x do inc(i);
      while m[j]>x do dec(j);
      if i<=j then begin
        t:=m[i]; m[i]:=m[j]; m[j]:=t;
        inc(i); dec(j);
      end;
    until i>j;
    if l<j then recurs_sort(l, j);
    if i<r then recurs_sort(i, r);
  End;
Begin
  recurs_sort(1, maxsize);
End;
Надеюсь сами разберетесь, что к чему.
anGeee вне форума Ответить с цитированием
Старый 26.09.2009, 02:36   #3
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

У Вас вот в этой строчке
Код:
if 1<r then quicksort(i,r) ;
условие никогда не выполнится, т.к. в r заносится размер массива и дальше r нигде не меняется, т.е. нет выхода из рекурсии. Посмотрите, где-то в переменных запутались
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 26.09.2009, 16:46   #4
wild-weight
Новичок
Джуниор
 
Регистрация: 25.09.2009
Сообщений: 2
По умолчанию

спасибо вам большое , стало понятно
wild-weight вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка двумерного массива по столбцам методом быстрой сортировки( Хоара) и пирамидальной. tworc22 Помощь студентам 3 28.10.2011 23:05
[pascal]Сортировка массива методом прямого выбора, работает неадекватно. fatoldsun Помощь студентам 7 22.04.2009 19:42
Сортировка массива методом вставок Pascal bpystep Помощь студентам 5 22.04.2009 01:13
Сортировка массива методом прямого выбора(Дельфи) Onza Помощь студентам 20 25.01.2009 12:05