Temel java Dersleri – Dizilerde Arama (Array Search)

Temel java Dersleri – Dizilerde Arama (Array Search)

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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
}
}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

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.length1; //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ı.”);
}
}

}

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..

 

28

Yorum Yap
0 Yorum yapan