NetBeans İkili Arama Algoritması (Binary Search Algrithm)

Temmuz 10, 2020 0 Yazar: admin

Bilgisayar bilimlerinde bir bilgi kaynağı veya veri yapısı üzerinde problemi her adımda iki parçaya bölerek yapılan arama algoritmasının ismidir. Bu anlamda bazı kaynaklarda bölerek arama olarak da geçmektedir.

  • Problemde aranacak uzayın tam orta noktasına bak
  • Şayet aranan değer bulunduysa bit
  • Şayet bakılan değer aranan değerden büyükse arama işlemini problem uzayının küçük elemanlarında devam ettir.
  • Şayet bakılan değer arana değerden küçükse arama işlemini problem uzayının büyük elemanlarında devam ettir.
  • Şayet bakılan aralık 1 veya daha küçükse aranan değer bulunamadı olarak bitir.
package ikiliarama;

/**
 *
 * @author Halil
 */
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class İkiliArama {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int []dizi=new int[100];
        Random rnd=new Random();
        for(int i=0;i<dizi.length;i++)
        {
            dizi[i]=rnd.nextInt(100);
        }
        Scanner klavye=new Scanner(System.in);
        System.out.println("Rastgele Dizi Oluşturuldu..");
        System.out.println(Arrays.toString(dizi));
        System.out.println("Aranacak Değeri Girin..");
        int aranan=klavye.nextInt();
        Sirala abc=new Sirala();
        abc.DiziSiralama(dizi,aranan);
    }
    
}

Kodun bu kısmı çalışırken Sirala sınıfına ihtiyaç duyacaktır. Bir sınıf oluşturarak alttaki kodu da oraya kopyalayın.

package ikiliarama;

import java.util.Arrays;

/**
 *
 * @author Halil
 */
class Sirala {
    public void DiziSiralama(int[]dizi,int aranan)
    {
        int yenideger=0;
        for(int i=1;i<dizi.length;i++)
        {
            for(int j=1;j<dizi.length;j++)
            {
                if(dizi[j-1]>dizi[j])
                {
                    
                    yenideger=dizi[j];
                    dizi[j]=dizi[j-1];
                    dizi[j-1]=yenideger;
                }
            }
        }
        System.out.println("Dizi Sıralandı..");
        System.out.println(Arrays.toString(dizi));
        int sondeger=dizi.length;
        int ilkdeger=0;
        
        for(int k=0;k<dizi.length;k++)
        {
            int ortadeger=(ilkdeger+sondeger)/2;
            
            if(aranan==dizi[ortadeger])
            {
                System.out.println("Değer"+ortadeger);
                break;
            }
            else if(aranan<dizi[ortadeger])
            {
                sondeger=ortadeger;
            }
            else if (aranan>dizi[ortadeger])
            {
                ilkdeger=ortadeger;
            }
        }
    }
}