Table Of ContentArama Algoritmaları
Doğrusal Arama
ve
Binary Arama
Doğrusal Arama - Örnek
• Dizi (Array) sayilistesi içerisindeki sayılar
aşağıdaki gibidir:
17 23 5 11 2 29 3
• 11, verilen dizi içerisinde aranacaksa doğrusal arama
algoritması 17, 23, 5, ve 11 sayılarını test eder.
• 7, aranacak ise 17, 23, 5, 11, 2, 29, ve 3
sırası ile test edilir (ve aranan sayı bulunamaz!. )
Doğrusal Arama Algoritması
• Algoritma:
bulundu değişkenini yanlış olarak atayınız;
pozisyon değişkenini –1 olarak atayınız;
index değişkenini 0 olarak atayınız.
wwhhiillee ((iinnddeexx << ddiizziiddeekkii eelleemmaann ssaayyııssıı)) vvee ((bbuulluunndduu ==== yyaannllıışş))
if (sayilistesi[index] == aranan sayı)
bulundu = doğru
pozisyon = index
end if
index değişkenine 1 ekle.
end while
return pozisyon
Doğrusal arama foksiyonu – C++ kodu
int Listeyiara(int list[], int elemansayisi, int aranansayi)
{
int index = 0;
int pozisyon = -1;
char bulundu = ‘Y’;
wwhhiillee (( ((iinnddeexx << eelleemmaannssaayyiissii)) &&&& ((bbuulluunndduu!!==‘‘DD’’)) ))
{
if (list[index] == aranansayi)
{
bulundu = ‘D’; // aranansayının bulunduğunu gösterir
pozisyon = index; // aranan sayının lokasyonunu tutar.
}
index++;// bir sonraki pozisyondaki elemanı araması için.
}
return pozisyon; // aranansayının lokasyonunu ana programa
} // döner veya -1 olarak döner.
Doğrusal Arama Algoritması
• Avantajları
I. Anlaşılması kolay bir algoritmadır.
II. Uygulamak için dizinin sıralı olması gerekmez!..
• Dezavantajları
I. Yavaştır. (çok elemanı olan diziler için)
Eğer aranan sayı dizide mevcut değil ise tüm
elemanların aranması gerekir, mevcut ise bulduğu
yerde durur.
Binary Arama Algoritması- Örnek
• Dizi (Array) sayilistesi içerisindeki
sayılar aşağıdaki gibidir:
2 3 5 11 17 23 29
• 11, elemanı aranıyorsa , 11 test edilir ve
binary arama durur!..
• 7, elemanı aranıyorsa binary arama 11, 3,
5, değerlerini test edip durur.
Binary Arama Algoritması
ilkindex değerini 0 yap.
sonindex değerini dizinin son elemanının pozisyon değerine eşitle.
bulundu=‘Y’;
pozisyon= -1.
While ( (bulundu !=‘D’ ) ve (ilkindex <= sonindex) )
ortaindex = (ilkindex+sonindex) / 2
IIff ((ddiizzii[[oorrttaaiinnddeexx]] ==== aarraannaann ddeeğğeerr))
bulundu=‘D’
pozisyon=ortaindex
Else If (dizi[ortaindex] > aranandeğer)
sonindex=ortaindex - 1.
Else
ilkindex= ortaindex + 1.
End If.
End While.
return pozisyon.
Binary Arama Fonksiyonu – C++ Kodu
int binaryArama(int dizi[], int boyut, int aranansayi)
{
int ilk = 0, // dizideki ilk değer
son = boyut - 1, // dizideki son değer
orta, // aramanın orta noktası
pozisyon = -1; // aranansayi nin lokasyon değeri
char bulundu = ‘Y’; // aranansayının bulunup bulunmadığı
wwhhiillee (( ((bbuulluunndduu !!==‘‘DD’’)) &&&& ((iillkk <<== ssoonn)) ))
{
orta = (ilk + son) / 2; // orta noktayı hesapla
if (dizi[orta] == aranansayi) // Eğer aranansayı dizinin ortasında ise
{
bulundu = ‘D’; // bulundu DOĞRU olarak atanmalı
pozisyon = orta; // aranansayının pozisyonu tutulur
}
else if (dizi[orta] > aranansayi) // Eğer aranan sayı daha küçük ise
son = orta - 1; // dizinin ilk yarısını arar.
else
ilk = orta + 1; // aksi takdirde dizinin ikinci yarısını arar.
}
return pozisyon;
}
Uygulama Programı
• Takip eden 2 slaytta sayıların girilebileceği bir
fonksiyon;
• Girilen sayıların dizi içerisinde, girildiği şekliyle
aranabilmesini sağlayan bir fonksiyon;
•• GGiirriilleenn ssaayyııllaarrıı ssıırraallaayyaann bbiirr ffoonnkkssiiyyoonn;;
• Binary arama yapan bir modül;
• Dizi içerisinden değerleri ekrana yansıtmak
için bir fonksiyon bulunmaktadır.
• Dikkatlice inceleyiniz.
while ( (bulundu == 'F') && (ilk <= son) )
#include<iostream.h> {
#include<stdio.h> orta = (ilk + son) /2;
#define max 10 if ( List[orta] == aranandeger )
{
void List(int L[],int numElems) bulundu = 'T';
{ pozisyon = orta ;
for(int i=0;i<numElems;i++) }
{ cout <<i <<". sayiyi gir----> "; cin>>L[i]; } else if ( List[orta] > aranandeger )
} son = orta -1;
else ilk = orta + 1;
int Listedenara(int List[],int boyut,int aranandeger) }
{ return pozisyon;
int indeks=0; }
int pozisyon=-1;
char bulundu='F'; void L_siralama(int List[], int boyut)
while ((indeks<boyut) && (bulundu=='F')) {
{ int i,k, gecici;
iiff((LLiisstt[[iinnddeekkss]]====aarraannaannddeeggeerr)) ffoorr ((ii==11;;ii<<bbooyyuutt;;ii++++))
{ { k=i;
bulundu='T'; while ((List[k]<List[k-1]) && (k>0))
pozisyon=indeks; {
} gecici=List[k];
indeks++; List[k]=List[k-1];
} List[k-1]=gecici;
return pozisyon; k--;
} }
}
int B_arama(int List[], int boyut, int aranandeger) }
{ void diziyi_goster( int List[], int boyut)
int ilk = 0, {
son = boyut-1, int i;
orta, pozisyon = -1; for (i=0;i<boyut;i++)
char bulundu = 'F'; cout << i << ". sayi --->" <<List[i] <<"\n";
}
sayfa 1
sayfa 2
Description:Dizi (Array) sayilistesi içerisindeki sayılar aşağıdaki gibidir: 17. 23. 5. 11. 2. 29. 3. • 11, verilen dizi içerisinde aranacaksa doğrusal arama algoritması