CodeBlanks Logo Icon CodeBlanks

Arrays.binarySearch

Arrays.binarySearch ile ikili aramayı öğrenirsin.

İkili arama: Arrays.binarySearch

Sıralı bir dizide değer aramanın hızlı yolu Arrays.binarySearch metodudur. Metot, aranan değerin indeksini döner; bulamazsa negatif bir sayı döner.

int[] nums = {1, 4, 7, 9};
int i = Arrays.binarySearch(nums, 7);
// i = 2

Önemli uyarı: dizi sıralı değilse sonuç tanımsızdır. Bu yüzden önce Arrays.sort çağrısı yapılır. İkili arama, her adımda arama aralığını ikiye bolduğu için çok hızlıdır.

Bulunamayan değerin dönüşü

binarySearch değeri bulamazsa negatif bir sayı döner. Bu sayı sadece "yok" demez; aynı zamanda değerin dizide olması gereken konumu da verir.

int[] nums = {1, 4, 7, 9};
int i = Arrays.binarySearch(nums, 5);
// i = -3  (5, 4 ile 7 arasında olmalı)

Sonuç şöyledir: -(eklenecekKonum) - 1. Pratik kullanımda i < 0 ile kontrol eder, değer yok der ve geçersin.

Uygulama Öğrenci numarasını ara

Aşağıdaki numaraları sırala, sonra Arrays.binarySearch ile 103 değerini ara ve bulunan indeksi yazdır.

Başlangıç kodu

Main.java
public class Main {
  public static void main(String[] args) {
    int[] ids = {105, 101, 103, 102};
    // Önce diziyi sırala
    // 103 değerini ikili arama ile ara
    // Bulunan indeksi yazdır
  }
}

Örnek çözüm

Main.java
Arrays.sort(ids);
int i = Arrays.binarySearch(ids, 103);
System.out.println(i);

Beklenen çıktı

2

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Adımları sırala: ikili arama akışı

Kavram Anlamı
1 Diziyi sırala
2 Ortadaki elemanı seç
3 Aranan değer ile karşılaştır
4 Aralığı ikiye böl

2 binarySearch'in ön koşulu nedir?

  • Dizi sıralı olmalı
  • Dizi en az 10 elemanlı olmalı Doğru cevap
  • Dizi yalnızca çift sayı içermeli
  • Dizide tekrarlı eleman olmamalı

Açıklama: Sıralı olmayan dizide sonuç tanımsızdır.

3 Boşluğu doldur: sırala ve ara

Soru
int[] nums = {9, 1, 7, 4};
Arrays.sort(nums);
int i = Arrays.____(nums, 7);
Cevap
int[] nums = {9, 1, 7, 4};
Arrays.sort(nums);
int i = Arrays.binarySearch(nums, 7);

Açıklama: Arrays.binarySearch ile arama yapılır.

Başlangıç bölümündeki tüm dersler