12-heap Sort
Transcript of 12-heap Sort
Bir İkili Ağaç Uygulaması
HeapSort
Heap özelliği
• Bir ikili ağacın heap özellikli olabilmesi için aşağıdaki iki özelliği sağlamalıdır.
a) Ağacın bütün seviyeleri (yapraklar hariç) doludur. Yani ağaç tam ve dengeli bir ağaçtır.
b) Bir düğüm çocuklarından ya büyüktür yada çocuklarına eşittir.
1)Her düğümün içeriği çocuklarından büyüktür.
2)Ağaç tam ikili ağaçtır.
Ağaç tam bir ikili ağaçtır. Ama hiçbir düğüm çocuklarından büyük değildir.
121110987654321
i indisinin sol çocukları 2*i
i indisinin sağ çocukları 2*i+1
Heap üzerindeki temel işlemler
• Ebeveyn(i)
return i/2
• SolÇocuk(i)
return 2i
• SağÇocuk(i)
return 2i+1
Heapify (A, i)
1. l solÇocuk(i)
2. r SağÇocuk(i)
3. if l heap-size[A] and A[l] > A[i]
4. then max l
5. else max i
6. if r heap-size[A] and A[r] > A[max]
7. then max r
8. if max i
9. then exchange A[i] A[max]
10. Heapify(A, max)
Build-Heap(A)
1. heap-size[A] length[A]
2. for i length[A]/2 downto 1
3. do Heapify(A, i)
Heapsort (A)
1. Build-Heap(A)
2. for i length[A] downto 2
3. do exchange A[1] A[i]
4. heap-size[A] heap-size[A] - 1
5. Heapify(A, 1)
Bir diziyi heap ağacına dönüştürmek
• Yukarıdaki dizi bir ikili ağaca şu şekilde dizilebilir.
• Yapraklar( 2, 4, 9 ve 10) heap’tir.
7 2 4 10
9
3 5
6
543210
427536
76
910
Heapifiy
Bir diziyi heap ağacına dönüştürmek
9 2 4 10
7
3 5
6
543210
429536
76
710
Heapify
12
Bir diziyi heap ağacına dönüştürmek
9 2 4 5
7
3 10
6
543210
4291036
76
75
Heapify
13
Bir diziyi heap ağacına dönüştürmek
3 2 4 5
7
9 10
6
543210
4231096
76
75
Heapify
14
Bir diziyi heap ağacına dönüştürmek
7 2 4 5
3
9 10
6
543210
4271096
76
35
Heapify
15
Bir diziyi heap ağacına dönüştürmek
7 2 4 5
3
9 6
10
543210
4276910
76
35
16
Heap Sıralama
7 2 4 5
3
9 6
10
4276910
543210 76
35a[ ]:
Heap
17
Heap Sıralama
7 2 4 5
9 6
3
427693
543210 76
105a[ ]:
Heap değil sıralı
Heapify
18
Heap Sıralama
7 2 4 5
3 6
9
427639
543210 76
105a[ ]:
heapify Sıralı
Heapify
19
Heap Sıralama
3 2 4 5
7 6
9
423679
543210 76
105a[ ]:
Heap Sıralı
20
Heap Sıralama
3 2 4
7 6
5
423675
543210 76
109a[ ]:
Heap değil Sıralı
Heapify
21
Heap Sıralama
3 2 4
5 6
7
423657
543210 76
109a[ ]:
Heap Sıralı
Heapify
22
Heap Sıralama
3 2
5 6
4
723654
543210 76
109a[ ]:
Heap değil Sıralı
Heapify
23
Heap Sıralama
3 2
5 4
6
723456
543210 76
109a[ ]:
Heap Sıralı
24
Heap Sıralama
3
5 4
2
763452
543210 76
109a[ ]:
Heap değil Sıralı
Heapify
25
Heap Sıralama
3
2 4
5
Heapify
763425
543210 76
109a[ ]:
Sıralı
Heapify
26
Heap Sıralama
2
3 4
5
762435
543210 76
109a[ ]:
Heap Sıralı
27
Heap Sıralama
3 4
2
765432
543210 76
109a[ ]:
Heap değil Sıralı
Heapify
28
Heap Sıralama
3 2
4
765234
543210 76
109a[ ]:
Heap Sıralı
29
Heap Sıralama
3
2
765432
543210 76
109a[ ]:
Heap değil Sıralı
Heapify
30
Heap Sıralama
2
3
765423
543210 76
109a[ ]:
Heap Sıralı
31
Heap Sıralama
2
765432
543210 76
109a[ ]:
Heap Sıralı
32
Heap Sıralama
765432
543210 76
109a[ ]:
Sıralı
33
Hatırlatma
Best case Average case Worst case Selection sort n2 n2 n2 Bubble sort n n2 n2 Insertion sort n n2 n2 Mergesort n * log2 n n * log2 n n * log2 n Quicksort n * log2 n n * log2 n n2 Heapsort n * log2 n n * log2 n n * log2 n
Bir İkili Ağaç Uygulaması
HeapSort