Arrays.binarySearch
- Java kursu
- Başlangıç
- Ders 61/116
- 5 dk
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
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
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
int[] nums = {9, 1, 7, 4};
Arrays.sort(nums);
int i = Arrays.____(nums, 7);
int[] nums = {9, 1, 7, 4};
Arrays.sort(nums);
int i = Arrays.binarySearch(nums, 7);
Açıklama: Arrays.binarySearch ile arama yapılır.