Детёныши ВП

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Детёныши ВП » Рекурсия » Быстрая сортировка


Быстрая сортировка

Сообщений 1 страница 3 из 3

1

Словесный алгоритм

1)
Устанавливаем левую и правую границу l и r(с какова по какой элемент мы хотим отсортировать) .

2)Находим средний элемент между правой и левой границей x (относительно этого элемента мы будем сортировать наш массив) .

3) Пока индикатор i > индикатора j то:

      а) Теперь (если сортируем по возрастанию) то ищем слева , от среднего элемента x , элемент который >=x
         
      б) А справа элемент который <=x
     
      в) И если индикаторы i и j не пересеклись то меняем местами элементы a[ i ] и a[ j ] и увеличиваем(или уменьшаем) индикаторы i и j

4)   Если индикатор j < правой границы r то запускаем сортировку от этих границ.

5)   И если индикатор j > левой границы l то запускаем сортировку от этих границ.

Скорость алгоритма "Быстрая сортировка" n*log2n

Теперь сам  код:

Код:
var a:array [1..1000000] of longint;
    i,n:longint;
 procedure qSort(l,r:longint);
  var i,j,z,x:longint;
 begin
   i:=l;
   j:=r;
   x:=a[(i+j)div 2];{находим  средний элемент}
   repeat
     while a[i]<x do i:=i+1;{ищем слева элемент который >=x }
     while a[j]>x do j:=j-1;{а справа элемент который <=x } 
     if i<=j then begin
                        z:=a[i];
                        a[i]:=a[j];
                        a[j]:=z;
                        i:=i+1;
                        j:=j-1;
                      end; {меняем местами элементы a[i] и a[j] и изменяем индикаторы i и j}
   until (i>j);
   if i<r then qSort(i,r);
   if j>l then qSort(l,j); 
 end;
begin         
 readln(n);
 for i:=1 to n do
  read(a[i]);
 qSort(1,n); {задаём границы сортировки}
 for i:=1 to n do
  write(a[i],' ');
end.

Отредактировано ЯНУш (2011-11-01 08:33:37)

0

2

Что-то похоже на Бинарный поиск,но немного не то.

0

3

чёто здесь есть

0


Вы здесь » Детёныши ВП » Рекурсия » Быстрая сортировка