Professional Documents
Culture Documents
Hzl Sralama
Bir pivot eleman seilir. Pivottan kk olanlar ve byk olanlar olarak dizi ikiye blnr. Herbir taraf zyineli olarak sralanr.
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]
st_index
pivot_index = 0
40
20 10
80
60
50
30 100
[0]
st_index
pivot_index = 0
40
20 10
80
60
50
30 100
[0]
pivot_index = 0
40
20 10
80
60
50
30 100
[0]
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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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]
20
10 30
40
50
60
80 100
<= data[pivot]
> data[pivot]
32
20
10 30
40
50
60
80 100
<= data[pivot]
> data[pivot]
33
34
Quicksort Analysis
Worst case: O(N2) Her rekrsif armda pivot en kk elemandr. Dizi zaten sral olmas halidir.
35
pivot_index = 0
10
12
13
50
57
63 100
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
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
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
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
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
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
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
> data[pivot]
43
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)
45