і цього алгоритму покажемо на прикладі сортування довільного вектора А:
Вибирається "центральний" елемент масиву А - х. Масив ділиться на дві частини цим елементом. p align="justify"> Покажчик i встановлюємо в початок лівій частині. Міняємо цей покажчик до тих пір, поки елемент Аi менше центрального елемента х (Аi <х). p align="justify"> Покажчик j встановлюємо в кінець правої частини. Міняємо цей покажчик до тих пір, поки елемент Аj більше центрального елемента х (Аj <х). p align="justify"> Якщо лівий покажчик i менше правого покажчика j, то елементи Аi і Аj міняємо місцями. Процес продовжується до тих пір, поки довільно обраний спочатку "центральний" елемент масиву не забере свою позицію в масиві, тобто всі елементи стоять зліва від цього елемента будуть менше його, а всі елементи, які стоять праворуч - більше, а також всі елементи лівої частини будуть менше кожного правого елемента.
Якщо ліворуч від обраного "центру" більше одного елемента, то процедура повторюється для лівої частини масиву.
Якщо праворуч від обраного "центру" більше одного елемента, то процедура повторюється для правої частини масиву.
Лістинг програми
{сортування масиву цілих чисел алгоритмом швидке сортування}
Program Sort2; crt, dos;
const = 5000; {максимальний розмір вектора}
type = array [1 .. ARRAYSIZE] of integer; {тип вектора}: arrayType; {сортований вектор}
n: integer; {кількість елементів у векторі}
exp: integer;: byte;: integer;, j, k: integer;: integer;: text;: real; _time: array [1 .. 3] of real;
{процедура створення вектора theArray з розміром SIZE}
Procedure Vector (SIZE, MAX: integer; var theArray: arrayType);; i: = 1 to SIZE do [i]: = random (MAX);
{Writeln ('Вихідний масив:'); i: = 1 to Size do (theArray [i], '');}; QSort (SIZE: integer; var theArray: arrayType; var time : real);, min, sec, hund: word; _time, finish_time: real; sort (L, R: integer);, Tmp: Integer;: = L;: = R;: = theArray [(L + R) div 2]; i <= j dotheArray [i]
end;
{головна програма};
assign (f, 'd: Work Ann tp71 BIN Serik');
rewrite (f); ('Введіть необхідну кількість точок для побудови графіки:');
Readln (point);: = round (ARRAYSIZE/point);
Writeln ('Введіть кількість експериментів:'); (exp); (f, 'Середній час сортування елементів'); (f, 'кол-во', 'назад-', '...