Merhaba,
Kısa geçiyorum çünkü şu an toplantıdayız. AVL tree konusunu işlerken bir hatam sonucu Heap Tree konusuna girdik. Hatta şu an Range konusundayız. Bu kodları Kayhan hocanın dersini izlerken yazmıştım ve D olanaklarını kullandım. Toplantıya çok faydalı olacağını düşünüyorum.
enum { MIN = 10, MAX = 20 }
import std.stdio, std.range, std.random;
class HeapSort {
this(int[] data) {
foreach(d; data)
{
this.ekle(d);
}
}
void ekle(int e)
in(ES < MAX) {
this.data[ES++] = e;
this.heapifyUp(ES-1);
}
int getir() {
return this.data[0];
}
void çıkart() {
if(this.empty) return;
int değer = this.data[--ES];
this.data[0] = değer;
this.heapifyDown(0);
}
bool empty() {
return ES == 0;
}
void popFront() {
this.çıkart;
}
int front() {
return this.getir;
}
auto length() {
return ES;
}
private:
int[MAX] data;
int ES;
int leftIndex(int i) {
return i*2+1;
}
int rightIndex(int i) {
return i*2+2;
}
int parentIndex(int i) {
return (i-1)/2;
}
void heapifyUp(int i) {
if(i == 0) return;
int parent = parentIndex(i);
if(this.data[parent] > this.data[i]) {
int temp = this.data[i];
this.data[i] = this.data[parent];
this.data[parent] = temp;
this.heapifyUp(parent);
}
}
void heapifyDown(int i) {
int sol = leftIndex(i);
int sağ = rightIndex(i);
int min;
if(sol >= ES) {
if(sağ >= ES) {
return;
} else min = sol;
} else {
if(this.data[sol] < this.data[sağ]) {
min = sol;
} else min = sağ;
}
if(this.data[min] < this.data[i]) {
int temp = this.data[i];
this.data[i] = this.data[min];
this.data[min] = temp;
this.heapifyDown(min);
}
}
}
void çıkartGöster(HeapSort HS, int x) {
foreach(_;0..x) HS.çıkart();
HS.data.writeln(": TÜKENMİŞ HALİ");
auto len = HS.length;
if(len) {
writef!"-%s^"(replicate("----", len - 1));
}
writefln(" ES (Eleman Sayısı): %d\n", len);
}
void main()
{
//int[] arr = [5, 8, 11, 13, 9, 25, 35];/*
writeln("RASGELE:");
auto RND = Random(41);
auto arr = MIN.iota(MAX).array.
randomShuffle(RND);//*/
arr.writeln("\nGİRDİLER: ", arr.length);
auto test = new HeapSort(arr);
test.data.writeln(": KURULMUŞ HALİ");
//"SIRALI: \n".writeln(test);/* Tek tek tüketme:
çıkartGöster(test, 1);
çıkartGöster(test, 2);//*/
çıkartGöster(test, 0);
} /* ÇIKTISI:
RASGELE:
[19, 15, 13, 14, 11, 16, 12, 17, 18, 10]
GİRDİLER: 10
[10, 11, 12, 17, 13, 16, 15, 19, 18, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]: KURULMUŞ HALİ
[11, 13, 12, 17, 14, 16, 15, 19, 18, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]: TÜKENMİŞ HALİ
---------------------------------^ ES (Eleman Sayısı): 9
[13, 14, 15, 17, 19, 16, 18, 19, 18, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]: TÜKENMİŞ HALİ
-------------------------^ ES (Eleman Sayısı): 7
[13, 14, 15, 17, 19, 16, 18, 19, 18, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]: TÜKENMİŞ HALİ
-------------------------^ ES (Eleman Sayısı): 7
*/