ASP 2 8 Nizovi Algoritam Quick Sort

You might also like

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 15

АЛГОРИТМИ И СТРУКТУРЕ

ПОДАТАКА
2. Низови
2.8. Алгоритам QuickSort
 Quick Sort:
 Прво се цео низ премештањем елемената дели на две групе: леву и десну, тако да су сви
елементи леве групе мањи од d (d је делитељ - пивот на групе и може бити произвољан елемент
низа, нпр. последњи), а елементи десне групе већи или једнаки d.
 Затим се размењују вредности делитеља и елемената који је на граничној позицији између група
(лево од граничне позиције су све вредности мање, а десне веће или једнаке од делитеља).
 Пошто је делитељ на одговарајућем месту које треба да има у сортираном низу, исти поступак
применити на елемент лево и десно од делитеља рекурзивним позивом функције.
 Временска сложеност: O(n2) и O(n log2 n)
 Опис рада алгоритма који елементе сортира у растућем поретку. Основни принцип рада
алгоритма се дели у три следеће целине:
 Изабирање пивот-елемента на датом интервалу.
 Распоред свих елемената мањих или једнаких овом пивот-елементу лево од њега, а свих већих
десно од њега у низу
 Рекурзивно понављање овог поступка на новонастале интервале лево и десно од овог пивот-
елемента.
 Детаљан опис алгоритма:
 Алгоритам на почетку добије низ и леву и десну границу интервала кога треба сортирати.
 За ове границе мора да важи да лева има мањи индекс од десне, иначе се алгоритам прекида.
 Унутар тог интервала, алгоритам изабере тзв. пивот-елемент, који се обично узима са његове средине или њене околине.
 Потом, алгоритам замењује места пивот-елемента и последњег елемента у низу (из разлога који ће бити споменут касније) и сортирање
може да почне.
 Алгоритам пролази кроз цео задат интервал и све елементе који су мањи или једнаки том пивот-елементу слаже на прво, друго, треће
итд. место у низу.
 При том елементи који су се затекли на том првом, другом, трећем итд. месту замењују своја места за места нађених елемената.
 Елементи који се већ налазе на неком од ових места и испуњавају услов да на њему остану и да се не премештају.
 По завршетку овог процеса, пивот-елемент са краја интервала се ставља на крај овог низа, иза задњег постављеног
елемента.
 Тај елемент је сад на свом месту и неће бити више потребе премештати га. Због овога је на почетку и био премештен
на крај — да се током размештања не би морало пратити његово место у низу те да премештање на крај буде лакше.
 Дати интервал је сад овим пивот-елементом подељен на два подинтервала од којих леви садржи све елементе њему
мање или једнаке, а десни све оне који су од њега већи.
 Алгоритам се сада понавља за ова два новонастала интервала.
 Процес прераспоређивања и дељења се на даљим подинтервалима понавља док се не дође до интервала дужине
један или нула, у којима је елемент већ на почетку алгоритма на свом месту.
 Пример сортирaњa низa:

Прво се изабире пивот-елемент отприлике на половини низа. У овом случају ће то бити број 9.

Следи премештање свих елемената мањих или једнаких 9 на леву страну низа.

Црвеном бојом биће означен пивот-елемент, а зеленом последњи елемент низа на кога се преслажу елементи мањи или једнаки пивот-елементу.

Овде је пролазак кроз низ завршен и пивот-елемент, број 9, ће заузети своје коначно место у низу.

Овакви елементи ће надаље имати плаву боју.

Према опису алгоритма, поступак се сад понавља на левом новонасталом подинтервалу.

Надаље ће неки кораци бити прескочени као небитни за праћење.


И опет на левом новонасталом подинтервалу.

Како овај пут нема елемента мањег или једнаког пивот-елементу, пивот- елемент ће доћи на прво место у подинтервалу, што значи
да ће дужина левог подинтервала бити нула.

Алгоритам над овим делом се сместа завршава и како исти нема даљих подела, прелази се на десни део настао приликом последње
поделе: део 2, 5, 4.

Надаље ће и делови проласка кроз низ (означавање зеленом бојом) бити прескакани.
До сада је сортиран интервал који се налази лево од првог пивот- елемента, деветке, и овако сортиран се може сложити погледом на плаве елементе у горњим листама: 1, 2, 4, 5, 7, 8 и 9 иза њега.

Алгоритам сад прелази на десну страну тог првог дељења тј. десно од броја девет. За пивот-елемент се опет узима број на средини интервала.

Но како су оба броја мања од њега, и остаје на крају интервала, где је као пивот-елемент био премештен.

Следећи пивот-елемент је број 11, који завршава на почетку интервала, јер нема елемената који су му једнаки или мањи од њега.

А преостали број 15 се већ налази на свом месту (интервал дужине један).

Ако се погледа навише, видеће се да је овај интервал сортиран као 11, 15, 16. Што се сад може спојити са левом страном. Овај низ је сортиран.
Задатак 20:
Саставити функцију за сортирање низа целих бројева дужине n у неопадајући
поредак методом Quick Sort користећи као аргумент функције показивач на низ.
За формирање функције користити динамичку меморију. Затим, саставити
програм који за унети низ целих бројева дужине n употребом претходне
функције сортира низ и исписује новодобијени низ.
Задатак 21:
Саставити функцију која партиционише интервал од левог до десног елемента
низа, тако да лево од пивота буду мањи, а десно већи од њега. Затим, саставити
рекурзивну функцију за сортирање низа целих бројева дужине n у неопадајући
поредак методом Quick Sort користећи као аргумент функције показивач на низ,
а која садржи претходно формирану функцију за партиционисање. На крају,
саставити програм који за унети низ целих бројева дужине n употребом
претходне функције сортира низ и исписује новодобијени низ.

You might also like