Veri Yapıları
Program çalışma hızı;
Belirlenen bir problemin çözümü için tasarlanan program kodunun görevini yerine getirmesi için gerekli zaman bilgisini veren bir
ifadededir.
Bellek Gereksinimi; Programın yürütülmesi sırasında, programın kodu ve kodun yürütülmesi esnasında kullanılan verilerin işgal ettiği bellek alanıdır.
Yürütme Zamanı; Bir programın veya algoritmanın işlevini yerine getirebilmesi için temel kabul edilen işlemlerden kaç adet
yürütülmesi gerektiğini veren bir bağıntıdır. Örneğin n elemanlı bir
küme için yürütme zamanı T(n) şeklinde gösterilir.
Veri Yapıları
Sıralama Algoritmaları;
Sayısal ortamdaki bilgilerin veya verilerin belirli bir anahtar sözcüğe göre belirli bir anlamda sıralı erişilmesini sağlayan düzenlemedir.
Temel sıralama Algoritmaları;
1. Araya sokma(Insertion) sıralaması 2. Seçmeli (Selection) sıralaması
3. Kabarcık (Bubble) Sıralaması
5. Birleşmeli (Merge) Sıralama
6. Kümeleme (Heap) Sıralaması
7. Hızlı (Quick) Sıralama
Veri Yapıları
Araya Sokma (Insertion) Sıralaması;
Araya sokma algoritması, sıralanacak dizinin ilk elemanını yerinde bırakarak ondan sonraki elemanları, sırayla alarak sıraya uygun yere sokar.
/*Araya sokma sıralamasıyla bir dizinin sıralanması*/
arayaSokma(int D[ ], int n) {
int i, k, ekle;
for(i=1;i<n;i++) {
ekle=D[i];
for (k=i−1; k>=0 && ekle<=D[k] ;k− −)
D[k+1]=D[k]; /* Geriye kaydırılıyor*/
D[k+1]=ekle; /*uygun yer boşaltıldı eklendi*/
} }
Veri Yapıları
Seçmeli (Selection) Sıralama;
Bu algoritmada dizinin bir ucundan başlanılır, (bu şalangış dizinin başı veya sonu olabilir) Örneğin küçükten büyüğe sıralama için, önce ilk eleman alınır ve daha sonra küme içerisindeki en küçük eleman aranır, bulunduğu zaman ilk elemanla yer değiştirilir, daha sonra ikinci eleman için de aynı işlemler yapılarak dizinin son elemanına kadar tekrarlanarak dizi sıralanmış olur.
/*Seçmeli Sıralama algoritması*/
secmeliSırala(int D[ ], int n) {
int i, index, j, enkucuk;
for(i=0;i<(n-1);i++) /*Dizinin başından başlanıyor*/
{
enkucuk=D[n-1]; /* son eleman en küçük kabul ediliyor*/
index=n-1;
for (j=i;j<(n-1);j++) /*daha küçüğü varmı diye aranıyor*/
if(D[j]<enkucuk) {
enkucuk=d[j];
index=j;
}
D[index]=D[i]; /* daha küçüğü varsa yer değiştiriyor*/
D[i]=enkucuk;
} }
Veri Yapıları
Kabarcık (Bubble Sort) Sıralaması;
Sıralanacak elemanlar üzerinde bir yünden diğer yöne doğru ilerlerken komşu iki elemanın yer değiştirme ilkesine dayanır.
/*kabarcık sıralama fonksiyonu*/
kabarcik(int D[ ], int n) {
int gecici, k, hareket;
for(hareket=0;i<(n-1);hareket++) {
for(k=0; k<(n-1-hareket);k++)
if(D[k]>D[k+1]); /* komşular karşılaştırılıyor*/
{
gecici=D[k]; /*yer değiştirme kodu*/
D[k]=D[k+1];
D[k+1]=gecici;
} }
}
Veri Yapıları
Birleşmeli (Merge) Sıralama;
Böl ve yönet yaklaşımına dayanır ve dolayısı ile rekürsif tasarlanması gereklidir. Sıralanması istenen küme elemanları, önce , iki alt kümeye
parçalanır, ve fonksiyon kendisini sol alt küme ve sağ alt küme için iki kez çağırır. Alt kümelerdeki eleman sayısı bir tane olana kadar devam edilir.
/*birleşmeli sıralama fonksiyonu*/
birlesmeli (D[ ], sol,sag) {
if(sol<sag) {
k=(sol+sag)/2;
birlesmeli(D,sol,k);
birlesmeli(D,k+1,sag);
birlestir(D,sol,k,sag);
} }
Veri Yapıları
/*birleştir alt fonksiyonu*/
birlestir(D,sol,k,sag) {
int i,j;
int M[ ];
for(i=sol,j=k+1;i<=k && j<=sag;) {
if(D[i]>D[j]);
{
M[]=D[i];
i++;
} else {
M[]=D[j];
j++;
} }
A[]=M[];
}
Veri Yapıları
Kümeleme (Heap) Sıralama;
Sıralanacak elemanlar ile önce bir kümeleme ağacı oluşturulur, daha sonra başka dizi gerektirmeksizin sırasız elemanların bulunduğu dizi üzerinde çalışılır.
/*kümeleme sıralama fonksiyonu*/
kumesiralamasi(A) {
kumeleme_agacini_olustur(A);
for(k=eleman_sayisi(A)-1;k>1;k--) {
kok=A[0];
kok ileA[k]’yı yer değiştir;
agacı_kumele(A,1);
} }
Veri Yapıları
Hızlı (Quick) Sıralama;
Böl ve yönet yaklaşımına dayanır ve dizi belirli bir sınır değerine göre ikialt diziye ayrılır. İkiye ayırma işlemi, bu sınır sayısından küçük elemanlar bir tarafa, büyük olan elemanlar diğer tarafa toparlanarak yapılır.
/*hızlı sıralama fonksiyonu*/
hizli_siralama(A,sol,sag) {
if(sol<sag) {
A dizisini ikiye böl ve sınır değerini q’ya ata;
hizli_siralama(A,sol,q);
hizli_siralama(A,k+1,sag);
} }
Veri Yapıları
/*hızlı sıralama fonksiyonu*/
hizli_sirala(int dizi[], int sol, int sag) {
register int k,j;
int ortadaki, gecici;
/*diziyi ikiye parçalama*/
k=sol;
j=sag;
ortadaki=dizi[(sol+sag)/2)]; /*sınır değeri*/
do {
while(dizi[k]<ortadaki && k<sag) k++;
while(ortadaki<dizi[j] && j>sol) j--;
if(k<=j){
gecici=dizi[k];
dizi[k]=dizi[j];
dizi[j]=gecici;
k++;j--;
}
}while(k<=j); /*parçalama bitti*/
if (sol<j) hizli_sirala(dizi,sol,j);
if (k<sag) hizli_sirala(dizi,k,sag);
}