Site icon Mobilhanem

Temel java Dersleri – Dizilerde Arama (Array Search)

Anotasyon

Java Dersleri

Merhaba Arkadaşlar,
Mobilhanem.com sitemiz üzerinden anlattığımız/yayınladığımız Temel Java Dersleri yazı serimize Dizilerde Arama (Array Search) ile devam edeceğiz. Diziler dersimizin 3.sü olan bu dersimizde dizi içinde arama işlemini anlatacağız.

Dizilerde genel olarak 2 şekilde arama yapabiliriz. 1.si Linear Search, ikincisi ise Binary Search‘tür. Öncelikle şunu bildirelim ki Binary Search yapabilmemiz için dizimiz sıralı olmalıdır. Ya büyükten küçüğe ya da küçükten büyüğe sıralanmış olmalıdır. Gelelim nasıl yapacağımıza. Ben direk kod üzerinden anlatmaya çalışacağım.

1- Linear Search

Linear Search , sıralı olmayan dizilerde ve küçük olan sıralı dizilerde arama yaparken kullanılır. Sıralı olup büyük olan dizilerde ise Binary Search kullanmak daha etkilidir.

Gelelim Linear Search kullanımına. Direk örnek üzerinden anlatacağım.

public class LinearSearch {
    public static void main(String args[]){
        int[] liste = {1, 4, 99, 2, 5, -3, 6, 2,-49,52};//Dizi'mizi oluşturuyoruz

        int sayiIndex = linearSearch(liste,52); //linearSearch methoduna dizimizi ve aradığımız sayıyı gönderiyoruz
        if(sayiIndex != -1){ //method -1 dönmediyse sayı bulunmuştur
            System.out.println("Aranan sayının index'i :"+sayiIndex);
        }else{ //-1 döndüğünde -1 dönecek ve else düşecek
            System.out.println("Aranan sayı bulunamadı");
        }
    }

    private static int linearSearch(int[] liste, int arananSayi) { //linearSearch metotumuz

        for (int i = 0; i <liste.length; i++) { //döngümüz dizimizin uzunluğu kadar dönüyor
            if(liste[i] == arananSayi){ //sırası ile tüm elemanlara bakıyourz
                return i; //eğer aradığımız elemanı bulduysak index'ini geri gönderiyoruz
            }
        }
        return -1; //Herhangi  bir değer bulunamadıysa -1 dönderiyoruz
    }
}

Yukarıda da gördüğünüz gibi Linear yani doğrusal arama yaptık. Sırası ile tüm elemanlara baktık.

2- Binary Search

Yukarıda da belirttiğim gibi sıralı olan büyük dizilerde Binary Search yapmak daha etkili bir yöntemdir. Binary Search için dizimiz sıralı olmak zorundadır.

Binary Search çalışma mantığını kısaca anlatmaya çalışayım. Öncelikle dizinin ortanca elementinin değeri alınır. Dizimiz sıralı olduğu için ortanca değer , aranan değerden büyük mü , küçük mü ve ya eşit mi diye bakılır. Eğer ortanca değer aranan değerden büyükse dizinin ortanca değerden sonraki değerlerine artık bakılmaz. Çünkü değerimiz başlangıç değeri ile ortanca değer arasındadır. Tam tersi olarak ortanca değer aranan değerden küçük ise dizinin ortanca değerinden önceki değerlerine bakılmaz. Bu işlem ortanca değer aranan değere eşit olana kadar devam eder.

Kod üzerinden anlatım yapacağım.

public class BinarySearch {
    public static void main(String args[]){
        int[] liste = {2, 4, 7, 10, 11, 45, 50, 52, 59, 60, 66, 69, 70, 79}; //Arrayimizi Sıralı biçimde oluşturduk

        int sayiIndex = binarySearch(liste,52); //binarySearch methoduna dizimizi ve aradığımız sayıyı gönderiyoruz
        if(sayiIndex != -1){ //method -1 dönmediyse sayı bulunmuştur
            System.out.println("Aranan sayının index'i :"+sayiIndex);
        }else{ //-1 döndüğünde -1 dönecek ve else düşecek
            System.out.println("Aranan sayı bulunamadı");
        }
    }

    private static int binarySearch(int[] list, int key) {
        int baslangic = 0; //dizinin başlangıç index'i
        int son = list.length-1; //dizinin bitiş index'i
        int orta; //dizinin ortanca index'i

        while (baslangic<=son){ //baslangic sondan büyük olana kadar devam edecek , zaten başlangıç değeri sondan büyğk olursa aradığımız eleman dizide yok demektir
            orta = (int)(baslangic+son)/2; //her seferinde ortanca değer bulunucak
            if(list[orta]>key) { //ortanca değer aranan değerden büyükse array ikiye bölünecek 
                son = orta - 1; //son değer, ortanca değerden 1 önceki değer olacak
            }
            else if(list[orta]==key) { //aranan bulundu
                return orta;//indexi dön
            }
            else {//ortanca değer aranan değerden küçükse
                baslangic = orta + 1; //baslangıç değeri, ortanca değerden 1 sonraki değer olacak
            }
        }

        return -1;//sonuç bulunamazsa -1 dönecek
    }
}

Binary search ile ilgili ufak bir animasyon paylaşıyorum.

Ayrıca anlamanıza yardımcı olacabileceğini düşündüğüm internetten bulduğum iki imajıda paylaşıyorum.

 

6 ‘yı bulmak için

 

 

 

19’u bulmak için

 

 

 

 

Yukarıda bizim yazmış olduğumuz binarySearch methodunu kendimiz yazmadan da Java’da yazılmış olanı kullanabiliriz. Bunun için java.util.Arrays kütüphanesini projemize import ediyoruz. Örnek kullanım kodlarını paylaşıyorum.

import java.util.Arrays;//Arrays class'ını kullanabilmek için import ediyoruz

public class BinarySearch {
    public static void main(String args[]){
        int[] liste = {2, 4, 7, 10, 11, 45, 50, 52, 59, 60, 66, 69, 70, 79}; //Arrayimizi Sıralı biçimde oluşturduk

        int sayiIndex = Arrays.binarySearch(liste,52); //Arrays.binarySearch methoduna dizimizi ve aradığımız sayıyı gönderiyoruz
        if(sayiIndex >= 0){ //method 0 dan küçük dönmüyorsa aradığımız sayıyı bulmuşuz demektir
            System.out.println("Aranan sayının index'i :"+sayiIndex);
        }else{ //sayı 0 dan küçük döndüğünde aradığımız sayı dizi içinde değildir.
            System.out.println("Aranan sayı bulunamadı.");
        }
    }

}

Gördüğünüz gibi arama işlemini biz yapmadan , ğArrays Classındaki binarySearch methodunu kullanarak aradığımız değeri bulabiliriz.

Diziler dersinin başında derslerin en az 4 5 ders süreceğini söylemiştim. Bir sonraki dersimde Dizilerde sıralama (Array Sort) işlemini anlatacağım. Sonrasında ise 2 ders dizilerde örnekler vererek hem diziler bilgilerimizi pekiştireceğiz hemde algoritma yeteneğimizi geliştirmeye devam edeceğiz.

Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı yine konu altından ve Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.

Tüm Temel Java Dersleri için tıklayınız..

 

30
Exit mobile version