На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Quick Sort
    Покажите, пожвлуйста, простую реализацию алгоритма метода Быстрой Сортировки. А то что-то на языке вертится, а выразит не очень получается. Заранее спасибо.
      Принцип работы примерно такой: процедура получает границы сортируемой области, выбираем ее центр. элемент, и переупорядочиваем элементы так, чтобы в одной части собрались элементы больше выбранного, а в другой - меньше. После этого вызываем эту процедуру для каждой из образовавшихся частей.
      если не совсем понятно, то могу исходник набросать :)
        Множество способов описано[url] http://www.sources.ru/cpp/faqs/faq_forum.shtml#58[/url]
        в том числе и  интересующий тебя ;D ;D ;D
          В стандартной поставке Free Pascal есть qsort

          //Copyright © 1993-98 by the Free Pascal Development Team

          procedure qsort(var A: array of integer);
             procedure sort(l,r: integer);
               var i,j,x,y: integer;
             begin
               i := l;
               j := r;
               x := A[ (l + r) div 2 ];
               repeat
                 while A[i] < x do inc(i);
                 while x < A[j] do dec(j);
                 if not (i>j) then
                   begin
                     y    := A[i];
                     A[i] := A[j];
                     A[j] := y;
                     inc(i);
                     dec(j);
                   end;
               until i>j;
               if l < j then sort(l,j);
               if i < r then sort(i,r);
             end;
          begin
           sort(0,High(A));
          end;



          //qsort2 то же что и qsort, но сортирует в обратном порядке


          procedure qsort2(var A: array of integer);
             procedure sort(l,r: integer);
               var i,j,x,y: integer;
             begin
               i := l;
               j := r;
               x := A[ (l + r) div 2 ];
               repeat
                 while A[i] > x do inc(i);
                 while x > A[j] do dec(j);
                 if not (i>j) then
                   begin
                     y    := A[i];
                     A[i] := A[j];
                     A[j] := y;
                     inc(i);
                     dec(j);
                   end;
               until i>j;
               if l < j then sort(l,j);
               if i < r then sort(i,r);
             end;
          begin
           sort(0,High(A));
          end;
            ну а чтобы обощить это дело, т.е. сделать приемлемым для сортировки любых данных нужно создать функцию получающую два елемента и возвращающую результат их сравнения.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0290 ]   [ 15 queries used ]   [ Generated: 5.05.24, 01:20 GMT ]