şükela:  tümü | bugün
  • ikiye kesme yöntemiyle aynı mantıkla çalışır.
    (bkz: ikiye kesme yöntemi)
  • while(sol<=sag)
    { orta=(sol+sag)/2;
    if(aranan= =a[orta])
    return orta;
    else if (aranan>a[orta])
    sol=orta+1;
    else
    sag=orta-1;}
    seklinde basit algoritma.yukari asagi diye bi oyun vardi.sayi tahmin etmece,onda kullanilirdi bu.aslinda direk bu yontemi kullanmayi orda kendi kendine kesfedersin.
  • linear search'e göre performansı gayet yüksektir. cok karizmatiktir. 1024 elemanlı bir dizide en boktan durumda bile maximum 10 kar$ıla$tırmada işi bitirir.
  • literaturde hatasiz bir surumunu yazmak yakla$ik 40 yil surmu$.

    (bkz: integer overflow)
  • sorularından biri; n elemanlı sıralı dizide verilen bir sayıyı bulmak olan bir assembly sınavı sonrasında, aramayı binary search yöntemi ile yapmayan öğrencilerin o sorudan puan alamamasına sebep olan arama yöntemi. ahmet tevfik inan bu durumu şöyle özetlemiştir, "sıralı dizide arama yaparken doğrusal arama kullanan bilgisayar mühendisliği okumasın". o(n) ve o(log2n) karşılaştırıldığında, adam haklı.
  • ssg'nin dedigi sorun c/c++/java gibi dillerde yazacaksaniz ortaya cikar cunku bu dillerde integerlar sayi degil mod 2^3`dir. python/ruby/lisp gibi dillerde cikmaz boyle bir sorun. ayni sorun mergesort'ta da vardir.

    middle item'i bulmak icin java'da mid = (a+b) >>> 1; denilebilir fakat c++ unsigned shift right desteklemediginden middle item'i bulmak icin mid = (a&b)+((a^b) >> 1) denmeli.

    konuyla inanilmaz derece alakasiz olsa da java unsigned left'i desteklemez iken c# destekler.

    bu kucuk hataya programming pearls kitabinin 46. ve 80. sayfalarinda anlatilan cesitli algorithmlarda rastlayabilirsiniz.

    edit: shift left, right'i yanlis yazmisim. unsigned left right ne degil mi?
  • jon bentley'in cacm'de cikan "writing correct programs" adli bir yazisinda, bu algoritma'da sikca yapilan bug'lari anlattigi bir yazida 20 yildan fazla surece goze carpmamis bir bug kalmistir.

    eger mid = (low+high)/2 yapiyorsaniz bunun integer overflow'a dusme sansi epey yuksek, bunun yerine, mid = low + (high – low)/2 yaparsaniz bu sorun ortadan kalkiyor.

    buna ek olarak, eger array indexlerinde negatif subscript notasyonu kullanilabiliyorsa, misal arr[-1] son elemani veriyorsa falan, (python misal) "high – low" ifadesinde low negatif buyuk bir sayi oldugunda, high pozitif kaldiginda yine integer overflow'a kucak acarsiniz. o zaman "(low+high)/2" ye donuste suphesiz ki bereket vardir.
  • worst case'deki performansi o(log(n))'dir.

    65536 elemanli sorted bir dizideki elemani maksimum 2 tabaninda (log(65536) + 1) = 16+1 = 17 adimda bulur. (bkz: cillop)

    worstcase, sorted array'in sinir uclarina yaklastikca olusur,
    best case, bu dizinin ortanca index'i ve civaridir,
    kalan bolge ise average case'dir.