Re: быстpая соpтиpовка

From
Artur Mogozov (2:5002/7.6)
To
Alexx Ovodov
Date
2002-12-24T22:06:06Z
Area
RU.ALGORITHMS
Привет, Alexx!

23 Дек 02 22:20, Alexx Ovodov писал All:


 AO> помогите плиз, а то вpемени мало. нyжно пpосто-напpосто отсоpтиpовать
 AO> массив двyхбайтных чисел, но вpемя соpтиpовки кpитично
 AO> (микpоконтpоллеpная система). я щас юзаю пyзыpьковый метод соpтиpовки,
 AO> но пpи yвеличении pазмеpа массива этот метод не покатит (не хватит
 AO> пpоцессоpного вpемени). есть ли более быстpые методы соpтиpовки? можно
 AO> ссылки в инет, или хотя бы пpивести названия методов, дyмаю в инете
 AO> отыщy инфоpмацию. хотя если комy не лень, может и так pассказать :)

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

 Данный метод был предложен Хоаром в 1962 году. В общем случае его
эффективность довольно высока ( O(n*log n) ), поэтому автор назвал его "быстрой
сортировкой". Такая эффективность достигается за счет отсечения ненужных
перестановок для уже отсортированного массива.

 Алгоритм.

 В исходном массиве А выбирается некоторый элемент Х ("барьерный"). Целью я
вляется запись Х на "свое место" в массиве, пусть это будет место k, такое,
чтобы слева от Х были элементы меньше, либо равные, а справа большие Х. То есть
A[1], A[2], ..., A[K-1], A[K]=X, A[K+1], ..., A[N].
В результате массив А разделен на две неупорядоченные части, барьером между
которыми является A[k]. Далее требуется сортировать полученные части таким же
образом до тех пор, пока в каждой части не останется по одному элементу, то есть
пока не будет отсортирован весь массив.

 Программа.

 Procedure QuickSort(m,t:Integer); {Первый вызов QuickSort(1,N)}
 Var
  i,j,x,w:Integer;
 Begin
  i:=m;
  j:=t;
  x:=a[ (m+t) div 2 ]; {}
  Repeat
   While a[i] < x do Inc(i);
   While a[j] > x do Dec(j);
   If i <= j Then
    Begin
     w:=a[i];
     a[i]:=a[j];
     a[j]:=w;
     Inc(i);
     Dec(j);
    End;
  Until i > j;
  If m<j Then QuickSort(m,j);
  If i<t then QuickSort(i,t);
 End;

 Вот и все.

 AO> и еще. сyществyет ли метод опpеделения медианы без соpтиpовки массива?
 Извини, чего не знаю, того не знаю...

Best regards, Artur. CU, Alexx!
... Мyжчина гоняется за женщиной, пока она его не поймает
--- GoldED+/W32 1.1.5-20011123
 * Origin: ки озадачены - есть ли жизнь в офф-лайне? (2:5002/7.6)