You are on page 1of 45

Hzl Sralama (Quick-Sort)

Bu algoritma Bl-Ynet yaklamna dayanmaktadr.

Hzl Sralama

Bir pivot eleman seilir. Pivottan kk olanlar ve byk olanlar olarak dizi ikiye blnr. Herbir taraf zyineli olarak sralanr.

Hzl sralama (Quicksort) Algoritmas


Tamsaylardan oluan n elemanl bir dizi verilmi olsun. If {dizi sadece bir elemandan oluuyorsa} , return Else pivot olarak kullanmak iin bir eleman se Diziyi aadaki gibi iki alt dizi halinde bl: Pivota eit yada pivottan kk olanlar Pivottan byk olanlar ki alt diziyi Hzl srala Return sonu dizi

rnek
Verilen diziyi algoritmaya gre sralayalm

40

20

10 80

60

50

30 100

Pivot Eleman se
Pivot eleman deiik ekillerde seilebilir. Bu rnekte ilk eleman pivot olarak seilecektir.

40

20

10 80

60

50

30 100

Diziyi blme
Pivottan kk yada eit olanlardan oluan bir altdizi(<= pivot) Pivottan byk olan elemanlardan oluan bir dizi(> pivot) Altdiziler orijinal dizide tutulur. Blme ilemini diziler paralanamayacak hale gelene kadar rekrsif olarak tekrarla

pivot_index = 0

40

20 10

80

60

50

30 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


alt_index
7

st_index

1. While data[st_index] <= data[pivot] ++st_index

pivot_index = 0

40

20 10

80

60

50

30 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


alt_index
8

st_index

1. While data[st_index] <= data[pivot] ++st_index

pivot_index = 0

40

20 10

80

60

50

30 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
9

1. While data[st_index] <= data[pivot] ++st_index

pivot_index = 0

40

20 10

80

60

50

30 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
10

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index

pivot_index = 0

40

20 10

80

60

50

30 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
11

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index

pivot_index = 0

40

20 10

80

60

50

30 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
12

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index]

pivot_index = 0

40

20 10

80

60

50

30 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
13

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index]

pivot_index = 0

40

20 10

30

60

50

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
14

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

60

50

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
15

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

60

50

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
16

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

60

50

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
17

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

60

50

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
18

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

60

50

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
19

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

60

50

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
20

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

50

60

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
21

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

50

60

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
22

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

50

60

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
23

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

50

60

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
24

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

50

60

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
25

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

50

60

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
26

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

50

60

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
27

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

50

60

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
28

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1.

pivot_index = 0

40

20 10

30

50

60

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
29

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1. 5. Swap data[alt_index] and data[pivot_index]
pivot_index = 0

40

20 10

30

50

60

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
30

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1. 5. Swap data[alt_index] and data[pivot_index]
pivot_index = 4

20 10

30

40

50

60

80 100

[0]

[1] [2] [3] [4] [5] [6] [7] [8]


st_index alt_index
31

Oluturulan iki alt dizi

20

10 30

40

50

60

80 100

[0] [1] [2]

[3] [4] [5]

[6] [7] [8]

<= data[pivot]

> data[pivot]

32

Recursion: Altdizilere Quicksort

20

10 30

40

50

60

80 100

[0] [1] [2]

[3] [4] [5]

[6] [7] [8]

<= data[pivot]

> data[pivot]

33

Quicksort Algoritmasnn Analizi


Elemanlar dzensiz dalmsa, Best case alma zaman: O(n log2n) Pivot eleman herzama ortada Her rekrsif armda dizi iki e paraya ayrlmakta.

34

Quicksort Analysis
Worst case: O(N2) Her rekrsif armda pivot en kk elemandr. Dizi zaten sral olmas halidir.

35

Quicksort: Worst Case


lk eleman pivot olarak seilmi olsun. Dizi zaten sral olsun

pivot_index = 0

10

12

13

50

57

63 100

[0] [1] [2]


st_index

[3] [4] [5]

[6] [7] [8]


alt_index

36

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1. 5. Swap data[alt_index] and data[pivot_index]
pivot_index = 0

10

12

13

50

57

63 100

[0] [1] [2]


st_index

[3] [4] [5]

[6] [7] [8]


alt_index
37

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1. 5. Swap data[alt_index] and data[pivot_index]
pivot_index = 0

10

12

13

50

57

63 100

[0] [1] [2]


st_index

[3] [4] [5]

[6] [7] [8]


alt_index
38

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1. 5. Swap data[alt_index] and data[pivot_index]
pivot_index = 0

10

12

13

50

57

63 100

[0] [1] [2]


st_index

[3] [4] [5]

[6] [7] [8]


alt_index
39

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1. 5. Swap data[alt_index] and data[pivot_index]
pivot_index = 0

10

12

13

50

57

63 100

[0] [1] [2]


st_index

[3] [4] [5]

[6] [7] [8]


alt_index
40

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1. 5. Swap data[alt_index] and data[pivot_index]
pivot_index = 0

10

12

13

50

57

63 100

[0] [1] [2]


st_index

[3] [4] [5]

[6] [7] [8]


alt_index
41

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1. 5. Swap data[alt_index] and data[pivot_index]
pivot_index = 0

10

12

13

50

57

63 100

[0] [1] [2]


st_index

[3] [4] [5]

[6] [7] [8]


alt_index
42

1. While data[st_index] <= data[pivot] ++st_index 2. While data[alt_index] > data[pivot] --alt_index 3. If st_index < alt_index swap data[st_index] and data[alt_index] 4. While alt_index > st_index, go to 1. 5. Swap data[alt_index] and data[pivot_index]
pivot_index = 0

10

12

13

50

57

63 100

[0] [1] [2] <= data[pivot]

[3] [4] [5]

[6] [7] [8]

> data[pivot]

43

Quicksort Algoritmasnn alma Zaman Analizi

Best case
Worst case

: O(n log2n)
: O(n2)

Average case

: O(n log2n)

44

Quicksort
QUICKSORT(A, p, r) if p<r then q PARTITION(A, p, r) QUICKSORT(A, p, q-1) QUICKSORT(A, q+1, r)

Algoritma rekrsif yapda olduundan bilgisayarn yt youn bir biimde kullanlmaktadr.

45

You might also like