2016-02-07 18 views
5

Yinelemeli olarak ikili arama gerçekleştirdiğimde, her zaman while (low < high) veya while(low <= high) kullanmam gerekip gerekmediğimi kafamda karıştırırım.İkili Arama Sonlandırma Durumu

Her ikisi de işe yarayacak, ancak biri bana birinin diğerinin pratik avantajının ne olabileceğini söyleyebilir mi?

+2

Eğer 'low' güncellemek ve' – svs

cevap

2

Listelemekte olduğunuz iki sonlandırma koşulu, genellikle düşük ve yüksek değerlerin kapsayıcı mı yoksa özel mi olduğuna bağlı olarak kullanılır. Sınırlarınız kapsayıcıysa, o zaman düşük = yüksek olduğunda, dizide bir elemanın kalması kontrol edilir ve iç döngü başka bir zaman çalıştırmalıdır. Bu nedenle, düşük ≤'un yüksek olup olmadığının bir testi uygundur. = Düşükten yükseğe sen, yüksek < daha uygundur düşük formunun yüzden bir test tüm unsurları tükettik ve bittiğinde Diğer taraftan, düşük o zaman, kapsayıcı ve yüksek özeldir.

+1

teşekkür ederiz high' bağlıdır. Bunun iyi bir örnek olabileceğini düşünüyor musunuz? Ben 'güncellemek her zaman orta' olarak high' varsayarsak - orta 'olarak low'' 1' ve '+ 1', düşük ve yüksek münhasır dizi nedenle olmadan sonlandırmak için güvenlidir içindeki eleman olduğunu kabul sonra kapsayıcı son elemanı kontrol etmek. Bununla birlikte, kapsayıcı sınırlar son unsuru güvenli bir şekilde kontrol eder ve elementin mevcut olup olmadığından emin olmadığımız durumlarda kullanılır. – Zanko

+0

Geçerli olduğunu varsayalım, ancak daha yaygın olan durum yalnızca çağrı yapılanmadır. Dizinin son öğesi (dahil sınırları) veya dizinin uzunluğu (özel sınırlar) dizini olmak için yüksek mi başlıyorsunuz? – templatetypedef

+1

'lo = 0' ve' hi = nums.length - 1' – Zanko

İlgili konular